thinkphp rabc权限总结
今天晚上把ThinkPHP的权限分配弄明白了,心里的包袱立刻放下了,感觉那个爽啊!稍微记录一下。
背景:CMS系统开发(17do)。
项目分组:Admin(后台管理)、Home(前台显示)。
Admin组中包含ManagerAction、UserActin、ArticleAction三个控制器
第一部分:表关系对应(箭头是指数据来源)
其中表结构式根据RBAC规定的结构创建的。
定义结果:站长1能访问项目用户和文章的所有操作,管理员3只能对文章模块操作不能访问用户模块。
第二部分:项目配置
项目的config.php文件中添加
//权限分配设置
'USER_AUTH_ON'=>true, //是否需要认证
'USER_AUTH_TYPE'=>1, //认证类型
'USER_AUTH_KEY'=>'userId', // 认证识别号
'USER_AUTH_MODEL'=>'user',//模型实例(用户表名)
'REQUIRE_AUTH_MODULE'=>'User', //需要认证模块
'NOT_AUTH_MODULE'=>'',
//无需认证模块
'USER_AUTH_GATEWAY'=>'/Public/login', //认证网关
//RBAC_DB_DSN 数据库连接DSN
'RBAC_ROLE_TABLE'=>'do_role', //角色表名称
'RBAC_USER_TABLE'=>'do_role_user', //用户和角色对应关系表名称
'RBAC_ACCESS_TABLE'=>'do_access', //权限分配表名称
'RBAC_NODE_TABLE'=>'do_node', // 权限表名称
第三部分:权限信息写入控制器
public
function checkUser(){
//表单数据不能为空
if($this->_post('username')&&$this->_post('password')&&$this->_post('verifycode')){
$pwd= $this->_post('password');
$username= $this->_post('username');
//验证码是否正确
$verify= $this->_post('verifycode');
if($this->_session('verify')!=
md5($verify)){
$this->error("验证码错误");
}else{
//创建数据库对象
$user=M('user');
//根据用户名查询
$cond['username']=$username;
$cond['active']=array('gt',0);
//加载RBAC类
import('ORG.Util.RBAC');
//通过authenticate读取用户信息
$result=RBAC::authenticate($cond);
//dump($result);
if($result){
if($result['password']==md5($pwd)){
$_SESSION[C('USER_AUTH_KEY')]=$result['id'];
$_SESSION["name"]=$result['name'];
//使用saveAccessList缓存访问权限
RBAC::saveAccessList();
$this->display('Manager:index');
}else{
$this->error("用户密码错误");
}
}else{
$this->error("用户名不存在或已经被禁用");
}
}
第四部分:创建验证权限控制器
class CommonAction extends Action{
//_initialize()方法是ThinkPHP提供的入口方法,类似于原PHP中__condition()构造函数。可以存放所有公用信息。
function
_initialize(){
//判断是否开启认证,并且当前模块需要验证
if(C('USER_AUTH_ON')&&!in_array(MODULE_NAME, explode(',',
C('NOT_AUTH_MODULE')))){
//导入RBAC类,开始验证
import('ORG.Util.RBAC');
//通过accessDecision获取权限信息
if(!RBAC::AccessDecision()){
//没有获取到权限信息时需要执行的代码
//1、用户没有登录
if(!$_SESSION[C('USER_AUTH_KEY')]){
$url= U('Public/login');
$this->error("您还没有登录不能访问",$url);
}
$this->error("您没有操作权限");
}
}
}
}
第五部分:验证控制器调用
只要需要权限验证的控制器继承CommonAction就可以啦!
使用admin账号登陆能正常访问
使用xiaoxiao账号登陆后不能访问用户列表页面
thinkphp rabc权限总结的更多相关文章
- ThinkPHP RBAC权限管理机制
RBAC是ThinkPHP很好用的后台权限管理的,话不多说,实现方法如下,也方便以后自己查询使用: 1.新建4个数据库表 self_role权限表 CREATE TABLE `self_role` ( ...
- RABC权限控制(页面操作角色,权限和进行分配)
上一节主要说的是如何通过url进行权限控制,这一节就说一下如何开发一个权限控制的界面,这样我们就能很方便的创建角色,并分配给用户不同角色和不同权限. 1.编写角色管理页面 这个编写较为简单,主要是通过 ...
- 使用 Casbin 作为 ThinkPHP 的权限控制中间件
PHP-Casbin 是一个强大的.高效的开源访问控制框架,它支持基于各种访问控制模型的权限管理. Think-Casbin 是一个专为 ThinkPHP5.1 定制的 Casbin 的扩展包,使开发 ...
- thinkphp 后台权限列表
核心代码: // 检测用户权限权限 public function admin_priv($action){ $action_list = session('user.action_list'); i ...
- thinkphp自定义权限管理之名称判断
权限管理,就是给不同的用户分配不同的权限.当用户登录或者操作时候进行判断,来阻止用户进行权限以外的操作.本次讲的是当用户登录一刻,只显示权限开启的内容. 一.建立数据库. 1.权限表funcla.来存 ...
- RABC --权限控制解读
一.基于RBAC的概念介绍 1.RBAC(Role-Based Access Control )基于角色的访问控制. 2.RBAC认为权限的过程可以抽象概括为:判断[Who是否可以对What进行How ...
- RABC权限控制(二级菜单实现)
目前大部分系统由于用户体验,基本上菜单不会做的很深,以二级菜单为例,做了一个简单的权限控制实现,可精确到按钮级别(基于django),下面具体看看实现 1.表结构的设计 无论开发什么都需要先梳理清楚需 ...
- ThinkPHP中RBAC权限带菜单栏显示和详细权限操作
RBAC是什么,能解决什么难题? RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制,说白了也就是用户通过角色与权限进行关联[其架构灵感来源于操作系 ...
- spring security实现动态配置url权限的两种方法
缘起 标准的RABC, 权限需要支持动态配置,spring security默认是在代码里约定好权限,真实的业务场景通常需要可以支持动态配置角色访问权限,即在运行时去配置url对应的访问角色. 基于s ...
随机推荐
- 高效IO之Java IO体系(一)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括J ...
- Delphi(ObjectPascal)基础语法
一个程序分为两个部分:1.程序首部:program 来标识这是一个pascal程序 后面的是可执行文件的名称程序名称2.程序体:说明部分:数据先定义后使用执行部分:以begin开始,以end结束 ...
- 8-MySQL-Ubuntu-数据表中数据的增加(一)
增(insert) (1)全部字段插入数据:按表中字段顺序增加数据 注:(1)主键字段可以使用0/null/default来占位.(2)gender字段中数据类型是枚举,可以使用索引数字1,2,3,4 ...
- zabbix--源码安装部署zabbix3.2
zabbix运行在lamp环境或者lnmp环境都是可以的,如果是新系统推荐使用lamp或者lnmp一键安装包, 或者可以向下面这种方式: PHP安装 源码安装 rpm -ivh php55w-comm ...
- 笔记43 Spring Web Flow——订购披萨应用详解
一.项目的目录结构 二.订购流程总体设计 三.订购流程的详细设计 1.定义基本流程pizza-flow.xml <?xml version="1.0" encoding=&q ...
- css的3d注意事项
1,如果要写出立体效果,所有的父容器都要添加属性transform-style: preserve-3d;不然子元素不能进行3d变换:背景色要写到最外层容器,且不能有transform-style: ...
- python基础第9章 魔法方法、属性和迭代器(一)
__getitem__和__setitem__: 这个方法返回与指定键想关联的值.对序列来说,键应该是0~n-1的整数,其中n为序列的长度.对映射来说,键可以是任何类型. class A : __ge ...
- 25 面向对象设计实例——基于PCL点云库的通用工具开发
0 引言 问题背景:pcl中提供了大量工具,用于对点云和三角面片文件进行处理和显示.在研究中,存在很多简易的需求,比如点云坐标转换,点云的打开显示以及同步显示,点云的最小包络求解,点云的格式转换等等. ...
- NOIp2018集训test-9-1(pm)
欢乐%你赛,大家都AK了. 1. 小澳的方阵 吸取了前几天的教训,我一往复杂的什么二维树状数组上想就立刻打住阻止自己,就可以发现它是超级大水题了.记录每一行每一列最后一次的修改,对每个格子看它所在行和 ...
- IDea 工具debug模式详细使用说明
IDea 工具debug模式详细使用说明 IDEA中如何使用debug调试项目 一步一步详细教程 Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生 ...