ThinkPhp RBAC实现原理

RBAC是英文Role-Based Access Control的缩写,是基于角色访问进行控制的机制。意思是给每个用户设定一个角色,然后根据这个角色来判断用户的权限。

在此基于ThinkPhp的MVC模式进行简单的小结(ThinkPhp的访问由模块和操作两部分进行控制)。

RBAC一般有五张表组成,分别是:

  1.用户表

  2.用户组表

  3.模块表

  4.方法表

  5.用户组-方法表

如下图所示

当用户访问某一个页面是,可以通过ThinkPhp的系统常量MODULE_NAME和ACTION_NAME,通过session获取当前用户的ID。

让网站的所有模块都继承一个AclAction,而AclAction则继承至Action。

在AclAction中定义一个初始化函数public function _initialize(){},这就意味着当用户访问网站上的任意一个页面时都会执行该函数。

在initialize()函数中,获取用户Id、ModuleName、ActionName,通过用户Id进行数据库查询获得用户组Id,利用用户组Id、ModuleName、ActionName到数据库中做多表连接查询,查找Group-Action-Action-Module中是否存在同时满足GroupIp、ModuleId、ActionId的记录,若存在则说明用户具有当前页面的访问权限,否则没有,利用ThinkPhp内置函数$this->error()进行提醒并跳转到登陆页面。

至此,整个RBAC权限把控的流程完成,用户权限认证完成。

原文地址:https://www.cnblogs.com/wurijie/p/4699723.html