角色权限管理是一个很常见的系统功能,常日包含用户管理、菜单管理、角色管理、权限管理等部分。在ThinkPHP框架中,官方曾推出RBAC和AUTH两种办法来实现。
在RBAC办法中,作者设计了用户表、权限表、节点表、角色表和用户角色表五张表,大概步骤是:先根据功能创建节点(实际上便是模块、掌握器、方法);然后创建角色,并为角色分配权限(便是将节点与角色关联起来),待角色创建完毕后,创建用户,并为用户分配角色;末了,当用户登录成功后,获取用户的角色,以及角色关联的权限,通过判断当前访问的模块、掌握器和方法是否存在个中,来决定当前登任命户对当前访问的模块、掌握器和方法是否拥有权限。
RBAC的设计决定了它只能进行较为粗糙的,而非风雅(比如对用户属性)的权限判断。为办理这个问题,作者又设计了AUTH办法。
在AUTH办法中,作者设计了用户表、用户与权限分组关联表(相称于RBAC中的用户角色表)、权限分组表(相称于RBAC中的角色表)和权限规则(相称于RBAC中的节点表)表四张表,大概的步骤与RBAC办法很相似,也是先创建权限权限规则;然后创建权限分组,并分配权限规则,待权限分组创建完毕后,创建用户,并为用户分配权限分组;末了,当用户登录成功后,获取用户的权限分组,以及权限分组关联的权限规则,通过判断用户的属性与权限规则是否匹配,来决定当前登任命户对当前操作是否有权限。
既然ThinkPHP可以实现角色权限管理,那同为PHP框架的Laravel,是否也可以实现角色权限管理呢?答案肯定是可以的,自诩让PHP程序员诗一样编程的Laravel怎么可以能弗成呢。
在Laravel中,要实现RBAC角色权限管理,可以借助扩展包Laravel Permission 。详细操作步骤可以参考下面的文档:
http://laravelacademy.org/post/9389.html
在上面的文档中有详细的操作步骤,大家只要按照解释操作,一样平常是可以顺利搭建起大略的角色权限管理系统的。如下图所示:
本文要提醒的是,虽然Laravel permission可以实现角色权限管理,但若你利用了,你就会创造,要想能自己的项目中利用,自己还是得修正修正的。首先,它没有关联菜单操作,无法根据权限显示菜单;其次,它的权限判断没有跟路由关联起来,不足灵巧。
针对以上问题,在这里我先容下,我的思考。
参考ThinkPHP中RBAC的实现,在创建权限permission的时候,我们将对应功能的路由,即route()中的参数部分,保存至name值。当用户登录成功后,获取用户角色及对付权限,判断当前功能的路由是否存在于其权限中,若存在,则表示当前登任命户拥有权限,否则表示没有权限。
在菜单部分,我们在创建菜单的时候,将菜单与对应的权限节点关联起来,与判断权限一样,判断哪些菜单与用户的权限有关联,有关联的显示出来,没有管理的则隐蔽。
至此,Laravel框架实现RBAC角色管理就完成了。至于要实现AUTH办法,则事理与此险些同等,大家可以举一反三。