Thinkphp3.2.3中的RBAC权限验证
最近在用TP的RBAC权限控制,在这里记录学习一下。先来看看相关的概念
一、相关概念
访问控制与RBAC模型
1、访问控制:
通常的多用户系统都会涉及到访问控制,所谓访问控制,是指通过某种方式允许活限制用户访问能力及范围的一种方法。这主要是由于系统需要对关键资源进行保护,防止由于非法入侵或者误操作对业务系统造成破坏。简而言之,访问控制即哪些用户可以访问哪些资源。
一般而言,访问控制系统包括三个组成部分:
主体:发出访问请求的实体,通常指用户或者用户进程。
客体:被保护的资源,通常是程序,数据,文件或者设备。
访问策略:主体和客体的映射规则,确定一个主体是否对客体具有访问能力。
2、RBAC (Role-Base-Access-Controll)
基于角色的访问控制(RBAC)的概念在七十年代就已经提出,但是直到九十年代由于安全需求的发展才又引起了广泛关注。RBAC 的核心思想是将系统资源的访问权限进行分类或者建立层次关系,抽象为角色的概念,然后根据安全策略将用户和角色关联,从而实现了用户和权限之间的对照。RBAC 通过引入角色并将其作为权限管理的中介,将访问控制系统分为两个部分,即权限与角色的关联和角色与用户的关联,具有灵活易控制的优点。
来源:http://www.ibm.com/developerworks/cn/java/j-lo-rbacwebsecurity/
我的理解就是给用户赋予不同的角色,给角色服务不同的权限,权限可以看成要访问资源的集合,角色只是用户和权限的过渡层,可能会问为什要有一个角色过渡层,可以试想一下没有role过渡层,有多个用户有着相同的数个权限,分配管理权限的时候,要重复分配权限,工作量很大,更何况修改权限的时候,更麻烦,可以说不利于代码的 维护,所以要有一个role的过渡层。下面来看看TP(thinkphp)中的RBAC的实现及用法。
二、TP中的RBAC类及使用RBAC类
1、RBAC权限验证的大致流程:
① 、验证当前操作是否需要验证
② 、验证是否登录
③ 、查看当前用户的身份
④ 、获取当前用户的权限列表
⑤ 、进行权限验证
2、 RBAC所依赖的5张数据表
-
CREATE TABLE IF NOT EXISTS `think_access` (
-
`role_id` smallint(6) unsigned NOT NULL,
-
`node_id` smallint(6) unsigned NOT NULL,
-
`level` tinyint(1) NOT NULL,
-
`module` varchar(50) DEFAULT NULL,
-
KEY `groupId` (`role_id`),
-
-
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-
-
CREATE TABLE IF NOT EXISTS `think_node` (
-
`id` smallint(
6)
unsigned NOT