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权限把控的流程完成,用户权限认证完成。