说到管理权限,最常见的当属RBAC(Role-based Access Control),基于角色的权限管理。说白了就是给每个用户分配一个角色,比如站长,局长,处长,然后给每个页面指定权限规则,比如增删管理员的页面只有角色为站长的才可以访问,而修改文章的页面则站长,局长都可以访问。是不是很简单,下面我拿thinkphp和laravel两个php框架举例。 Thinkphp官方称用到5张表,think_user (用户表),think_role (用户分组表),think_node (操作节点表),think_role_user (用户和用户分组的对应),think_access (各个操作和用户组的对应)。回到上面举的例子,用户表就相当于所有用户的数据表;用户分组表就相当于站长局长等各类角色的数据表;操作节 点表则是各个页面或者说访问节点的数据表;用户和用户分组的对应表就更容易理解了,指的是每个用户与所属角色的对应表;最后一张表是操作与用户组的对应表,这可是核心所在了,规定了每个操作节点的操作权限都赋予给哪些角色。是不是很简单。 再说说Laravel的权限管理,一般都说是4张表, roles (存储角色),permissions(存储权限), role_user(存储角色与用户之间的多对多关系),permission_role (存储角色与权限之间的多对多关系)。其实细看与thinkphp是一毛一样的,只是没有把用户表给说出来。 理解了RBAC,就要深入一下了,Auth类管理权限。它只有三张表,规则表(think_auth_rule) ,用户组表(think_auth_group), 用户组明细表(think_auth_group_access)。咱们还拿最开始的比喻来举例,用户组明细表类似于用户对应角色表,将不同用户划分为不同组别(角色);规则表则是列出所有的权限规则,它不同于RBAC的是没有把控制器方法当成节点,没有把页面当成节点,而是以抽象的权限当成节点。比如是否显示某个按钮,是否新增用户,是否查看文章定义为一个规则;最后一张用户组表则是角色与规则的对应关系了。咱们举个例子吧,假设给修改管理员信息这个操作定义一个change_admin权限,然后把这个权限分给了user1组和user2组,那么实际运用的时候,就查看当前用户是否属于user1组或user2组。 当然除了以上两种角色对应权限或规则的管理方式外,对于权限分级简单的也可以弃用角色,直接以用户对应权限。也就是说只需要建一张用户权限对应表,采用多对多的关系,规定某个页面与各个用户的对应关系。实际运用时只需要在此表中查找有对应的权限就可以了。