欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

学院君 使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理(二):使用篇 有大用

使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理(二):使用篇

上一篇教程中我们讨论了如何安装配置Entrust,这一篇我们来详细讨论其使用方法。

1、创建角色/权限并进行分配

首先我们来创建RolePermission
接下来我们将创建的两个roles分配给用户:
现在我们还需要添加相应权限到这些角色上:

2、检查角色&权限

完成上述操作后,下面我们可以检查相应角色和权限:
hasRole()can都可以接收数组形式的角色和权限进行检查:
默认情况下,如果用户拥有以上任意一个角色或权限都会返回true,如果你想检查用户是否拥有所有角色及权限,可以传递true作为第二个参数到相应方法:
用户可以拥有多个角色。 除此之外,还可以通过Entrust门面检查当前登录用户是否拥有指定角色和权限:
甚至还可以通过通配符的方式来检查用户权限:

3、ability方法

还可以通过使用ability方法来实现更加高级的检查,这需要三个参数(角色、权限、选项),同样角色和权限既可以是字符串也可以是数组:
这将会检查用户是否拥有任意提供的角色和权限,在本例中会返回true,因为用户的角色是admin并且拥有create-post权限。 第三个参数是一个可选数组:
其中validate_all是一个布尔值,用于设置是否检查所有值;return_type用于指定返回布尔值、检查值数组还是两者都有。 下面是一个输出示例:
同样,Entrust门面也为当前登录用户提供了ability方法:

4、Blade模板

在Blade模板中也可以使用上述三个方法对应的指令:

5、中间件

你可以在中间件中通过角色或权限来过滤路由以及路由群组:
支持OR/AND逻辑:
同样可以使用ability中间件:

6、路由过滤器的快捷实现

通过权限和角色过滤路由你还可以在app/Http/routes.php调用如下代码:
以上方法都可以接受第三个参数,如果第三个参数为空那么禁止访问默认调用App::abort(403),否则会返回第三个参数,所以我们可以这么做:
甚至还可以接受第四个参数,该参数默认为true,意味着将会检查提供的所有角色和权限,如果你将其设置为false,则该方法只有在所有角色/权限都不满足才会返回失败:

7、路由过滤器

Entrust角色/权限可通过调用Entrust门面上的canhasRole方法应用在过滤器中:
使用过滤器来检查角色:
正如你所看到的,Entrust::hasRoleEntrust::can方法检查用户是否登录、然后才去判断他们是否有用指定角色或权限,如果用户没有登录则直接返回false。 如果想要查看在Laravel 5.2中基于Entrust实现后台权限管理的实例可参考Ryan的这个Github项目:https://github.com/yuansir/laravel5-rbac-example

上一篇: 使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理(一):安装配置篇

下一篇: 基于 Laravel Permission 扩展包在项目中轻松实现 RBAC 权限管理功能




来自  https://xueyuanjun.com/post/3761

普通分类: