使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理(二):使用篇
在上一篇教程中我们讨论了如何安装配置Entrust,这一篇我们来详细讨论其使用方法。
1、创建角色/权限并进行分配
首先我们来创建Role
和Permission
: 接下来我们将创建的两个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
门面上的can
和hasRole
方法应用在过滤器中: 使用过滤器来检查角色: 正如你所看到的,Entrust::hasRole
和Entrust::can
方法检查用户是否登录、然后才去判断他们是否有用指定角色或权限,如果用户没有登录则直接返回false
。 如果想要查看在Laravel 5.2中基于Entrust实现后台权限管理的实例可参考Ryan的这个Github项目:https://github.com/yuansir/laravel5-rbac-example
53 条评论
怎么解决的?什么配置