使用 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 条评论
怎么解决的?什么配置