ThinkPHP---RBAC

1、什么是RBAC

基于角色的访问控制(Role-Based Access Control)做为传统访问控制(自主访问,强制访问)的有前景的代替受到普遍的关注。php

在RBAC中,权限与角色相关联,用户经过成为适当角色的成员而获得这些角色的权限。这就极大地简化了权限的管理。node

在一个组织中,角色是为了完成各类工做而创造,用户则依据它的责任和资格来被指派相应的角色,用户能够很容易地从一个角色被指派到另外一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据须要而从某角色中回收。角色与角色的关系能够创建起来以囊括更普遍的客观状况。 git

2、ThinkPHP中的RBAC

先看下官方给的实例所用到的数据表,经过5张表实现权限控制,定义以下:github

RBAC 要用到5个数据表web

think_user (用户表)thinkphp

think_role (用户分组表)数据库

think_node (操做节点)数组

think_role_user (用户和用户分组的对应)app

think_access (各个操做和用户组的对应)ide

用户表

角色表,有哪些角色,该角色与对应的userid用户相关联

根据用户表的id给出对应的角色id相关联,也就是给用户分配角色,好比userid为3的角色为2,根据role角色表,7表明员工的角色

access表,权限表,好比角色id为2,也就是员工的权限,能够的对应的结点

结点表,表明有哪些应用-模块-模块方法,而且定义了之间的一种关系,好比noteid为30的是Public模块,noteid为31,32,33,34的方法add,insert,edit,update都属于Public。noteid为85的test方法,属于noteid为84的Game模块下的方法。


字段name就是当项目,模块或者操做的名称了。

字段PID 记录他们的从属关系,好比某一个模块是属于哪一个项目,某个操做属于哪一个模块。

字段level 表示该节点的层级 换句话就是说 level=1 为项目 ,level=2为模块 ,level=3就是操做了,好比说 admin项目,他的PID 就是 0 (项目的PID都是0) level就是1,nane就是admin了,admin项目下面有的user模块,它的level就应该是2,pid就是admin的id, admin下面user模块的add操做,level就该是3了,pid就应该是前面的user对应的ID.

3、config配置文件详解

咱们看看thinkphp官方示例中的config文件:

 

 

你们看注释就应该懂大半了,其中Public模块是无需认证的,道理很简单,没登陆以前你们都是游客身份,若是登陆页面也要权限,那从哪里登陆呢?是吧,呵呵。默认网关地址就是认证失败,没有权限跳转到此处,从新登录。ADMIN_AUTH_KEY表示超级管理员权限,若是你在user表创建一个名为admin的用户,那么这个用户就是超级管理员,不用给它分配权限,什么权限都有,为何要设置一个这样的管理员,由于当你把权限分配错了容易引发系统权限混乱,搞得你们都访问不了,这时候超级管理员就来了。

4、RBAC类的几个重要的方法

authenticate($map,$model=”)方法 传入查询用户的条件和用户表的MODEL 返回数组包含用户的信息

saveAccessList($authId=null)方法 传入用户的ID 此方法不返回值,只是设置 $_SESSION[‘_ACCESS_LIST’]的值,其中包含了全部该用户对应的用户组的有权限操做的全部节点 $_SESSION[‘_ACCESS_LIST’][‘项目名’][‘模块名’][‘操做名’],之后判断权限就是判断当前项目,模块和操做是否在 $_SESSION[‘_ACCESS_LIST’]中能找到。s

checkAccess() 方法 检测当前模块和操做是否须要验证 返回bool类型

checkLogin()方法 检测登陆

AccessDecision($appName=APP_NAME) 方法 就是检测当前项目模块操做 是否在$_SESSION[‘_ACCESS_LIST’]数组中,也就是说 在 $_SESSION[‘_ACCESS_LIST’] 数组中$_SESSION[‘_ACCESS_LIST’][‘当前操做’][‘当前模块’][‘当前操做’]是否存在。若是存在表示有权限 不然返回flase。

getAccessList($authId) 方法 经过查询数据库 返回权限列表 $_SESSION[‘_ACCESS_LIST’]的值了。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息