本文主要为广大网友提供“ThinkPHP的RBAC(基于角色权限控制)深入解析”,希望对需要ThinkPHP的RBAC(基于角色权限控制)深入解析网友有所帮助,学习一下!
一、什么是RBAC
基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。
在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。
在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。
二、ThinkPHP中的RBAC
先看下官方给的实例所用到的数据表,通过5张表实现权限控制,定义如下:
RBAC 要用到5个数据表
think_user (用户表)
think_role (用户分组表)
think_node (操作节点)
think_role_user (用户和用户分组的对应)
think_access (各个操作和用户组的对应)
用户表
角色表,有哪些角色,该角色与对应的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模块下的方法。
三、config配置文件详解
我们看看thinkphp官方示例中的config文件:
复制代码 代码如下:
array(
''APP_AUTOLOAD_PATH''=>''@.TagLib'',
''SESSION_AUTO_START''=>true,
''USER_AUTH_ON'' =>true,
''USER_AUTH_TYPE'' =>1, // 默认认证类型 1 登录认证 2 实时认证
''USER_AUTH_KEY'' =>''authId'', // 用户认证SESSION标记
''ADMIN_AUTH_KEY'' =>''administrator'',
''USER_AUTH_MODEL'' =>''User'', // 默认验证数据表模型
''AUTH_PWD_ENCODER'' =>''md5'', // 用户认证密码加密方式
''USER_AUTH_GATEWAY'' =>''/Public/login'',// 默认认证网关
''NOT_AUTH_MODULE'' =>''Public'', // 默认无需认证模块
''REQUIRE_AUTH_MODULE'' =>'''', // 默认需要认证模块
''NOT_AUTH_ACTION'' =>'''', // 默认无需认证操作
''REQUIRE_AUTH_ACTION'' =>'''', // 默认需要认证操作
''GUEST_AUTH_ON'' =>false, // 是否开启游客授权访问
''GUEST_AUTH_ID'' =>0, // 游客的用户ID
''DB_LIKE_FIELDS'' =>''title|remark'',
''RBAC_ROLE_TABLE'' =>''think_role'',
''RBAC_USER_TABLE'' =>''think_role_user'',
''RBAC_ACCESS_TABLE'' =>''think_access'',
''RBAC_NODE_TABLE'' =>''think_node'',
''SHOW_PAGE_TRACE''=>1//显示调试信息
);
大家看注释就应该懂大半了,其中Public模块是无需认证的,道理很简单,没登录之前大家都是游客身份,如果登录页面也要权限,那从哪里登录呢?是吧,呵呵。默认网关地址就是认证失败,没有权限跳转到此处,重新登陆。ADMIN_AUTH_KEY表示超级管理员权限,如果你在user表建立一个名为admin的用户,那么这个用户就是超级管理员,不用给它分配权限,什