TP框架中RBAC的介绍与认识--适合菜鸟初学者
来源:互联网 发布:javascript 设置css 编辑:程序博客网 时间:2024/06/09 19:14
RBAC的介绍与认识
RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制。简单来说就是用户对应角色,角色对应权限,一个用户可以对应多个角色,一个角色对应着多个权限,他们之间形成的是多对多的关系,因此就有了“用户-角色-权限”。
需求:
为何需要设置RBAC权限管理?由于角色、权限之间的变化比角色、用户关系之间的变化相对要慢得多(好比新公司不断增进员工,但是里面每个职位所对应做的事是变化比较小的),减小了授权管理的复杂性,降低管理开销;而且能够灵活地支持应用系统的安全策略,并对应用系统的变化有很大的伸缩性;在操作上,权限分配直观、容易理解,便于使用(只需对角色分配权限就可以了,方便操作);分级权限适合分层的用户级形式;重用性强。设计:
用户表:记录下用户的基本信息,该用户属于哪个渠道,该管理员是普通管理员还是超级管理员。所以增加了渠道字段source_id,以及管理员字段is_admin。管理员分为三种,普通管理员、超级管理员、系统管理员。系统管理员可以理解为开发者,用来创建超级管理员并给超级管理员分配权限,超级管理员则是对应渠道的最大权限管理员。
角色表:用户通过角色与资源相关联。这里需要增加渠道字段,每个渠道创建的角色归本渠道所有。(这边角色可以有:编辑者、审查员)
资源表:这里的理解就是一个个的系统菜单。(系统的操作菜单:文章的添加、文章的修改、文章的删除、文章的查看等操作)
角色资源关系表:维护角色与资源的关系。(比如:编辑者只能对文章进行添加、以及文章修改;而审查员能对文章进行查看以及文章的删除等等)
在TP框架中你可以在Extend/Library/ORG/Util
中找到RBAC.class.php
文件参考建表语句,其中表字段的含义如下:
think_user表:think_role表:
think_node表:
think_role_user表:
其表之间的关联关系如图:
4.实现:
1.实现RBAC管理的前导性工作
首先,主要是做一些前导性的工作,1)用户的增、删、改、查 2)角色的增、删、改、查 3)节点的增、删、改、查 4)配置权限(更新权限)。然后,RBAC处理类提供静态的方法有:
2.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//显示调试信息);
ADMIN_AUTH_KEY表示超级管理员权限,如果你在user表建立一个名为admin的用户,那么这个用户就是超级管理员,不用给它分配权限,什么权限都有,为什么要设置一个这样的管理员,因为当你把权限分配错了容易引起系统权限混乱,搞得大家都访问不了,这时候超级管理员就来了。(这也就是为什么需要超级管理员了)
3.RBAC处理类的实际应用
在完成用户登录,角色创建,节点增删改查的工作后,就只剩下了RBAC如何在对应程序代码中应用了。挻简单的,只用在原来的代码其他上改动几个地方即可。
用户登录时,写入用户权限
用户操作时,进行权限验证(在其验证时要在控制器目录创建一个
CommonAction.class.php文件,然后改写所有要权限验证的类,让其继承自CommonAction,进行每次控制器的判断)
在ThinkPHP中提供了一个_initialize()方法,是在类初始化就会执行的,也就是只要后面控制器继承自CommonAction类,就会在作对应操作时,执行_initialize()方法。
- TP框架中RBAC的介绍与认识--适合菜鸟初学者
- 关于php中laravel框架的学习--适合菜鸟初学者
- Mina框架简单介绍<适合初学者了解>
- 关于ThinkPHP常用的标签--适合菜鸟初学者
- TP框架中D方法与M方法的区别
- TP框架中D方法与M方法的区别
- TP框架中D方法与M方法的区别
- TP框架中D方法与M方法的区别
- TP框架的介绍和使用
- tp下的rbac之运用
- 今天完成一个适合初学者的j2ee框架
- 一些有用的开源框架 适合初学者学习
- Android--控件Button的详细用法介绍(适合初学者)
- TP框架与ajax之间的问题
- tp框架中自定义类的调用
- tp框架中const的设置问题
- tp框架中模板赋值的简化
- TP框架中对数据库的 操作
- 二叉树 (Binary Tree)的遍历
- oo-面向对象论
- zabbix 自定义变量
- 匈牙利算法详解
- XML 特殊字符处理
- TP框架中RBAC的介绍与认识--适合菜鸟初学者
- android.os.NetworkOnMainThreadException 解决办法
- NYOJ 26 最长公共子序列
- HDU 5289-B - Assignment-贪心
- 1097
- 操作系统---精髓与设计原理 之 计算机系统概述
- 读写Excel数据
- POJ 2253 Frogger
- 字典树模版