ThinkPhp RBAC实现原理

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

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

RBAC通常有五张表组成,分别是:函数

  1.用户表网站

  2.用户组表this

  3.模块表blog

  4.方法表继承

  5.用户组-方法表it

以下图所示io

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

让网站的全部模块都继承一个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权限把控的流程完成,用户权限认证完成。

相关文章
相关标签/搜索