THINKPHP RBAC
来源:互联网 发布:stm8单片机视频教程 编辑:程序博客网 时间:2024/06/07 06:06
RBAC一般情况下会有五张表,如果很难记的话就可以这样记,首先有一个我们平时的用户表user,然后就是角色表,系统中有哪些角色role表,然后就是角色-用户表,也即用户ID拥有的角色ID对应的数据表。然后就是NODE表用来记录系统中有哪些模块,哪些操作的表,然后及时角色-节点表用来记录系统中角色ID对应的NODEID表。
分别对应pre_user,pre_role,pre_role_user,pre_node,pre_access
其中,我们在pre_node表中会加入pid跟level,字段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.
如何使用:
在登录按钮提交之后写如下代码:详细代码可以看yourphpcms的LoginAciton.classs.php
$condition = array();
$condition['username'] =array('eq',$username);
import ( '@.ORG.RBAC' );
$authInfo = RBAC::authenticate($condition);
解读:RBAC::authenticate方法返回用户表中查询条件的信息,然后接下来可以进行密码对比
完成密码对比后接下来就会跳到session记录跟RBAC权限的记录了
$_SESSION['username'] = $authInfo['username'];
$_SESSION['adminid'] = $_SESSION['userid'] = $authInfo['id'];
$_SESSION['groupid'] = $authInfo['groupid'];
$_SESSION['adminaccess'] = C('ADMIN_ACCESS');
$_SESSION[C('USER_AUTH_KEY')]
$_SESSION['email']
$_SESSION['lastLoginTime']
$_SESSION['login_count']
if($authInfo['groupid']==1) {
$_SESSION[C('ADMIN_AUTH_KEY')]=true;
}
//保存登录信息
$data = array();
$data['id']
$data['last_logintime']
$data['last_ip']
$data['login_count']
$dao->save($data);
// 缓存访问权限
RBAC::saveAccessList();
接下来就是权限验证了,我们会所有的类都继承AdminBaseAction.Class.php,然后在_initialize方法中加入如下代码
// 用户权限检查
AccessDecision($appName=APP_NAME)方法,就是检测当前项目模块操作是否在$_SESSION['_ACCESS_LIST']数组中,如果没有权限,则判断$_SESSION[C ( 'USER_AUTH_KEY')]是否存在,既判断用户是否登录未登录则跳转到登录界面,登录了则跳出没有权限操作的界面。
注意,RBAC的五张数据表以及跳转页面的地址都是在config.php中设置的咯
- THINKPHP RBAC
- thinkphp rbac
- ThinkPHP-RBAC
- ThinkPHP-RBAC
- ThinkPHP RBAC
- ThinkPHP-RBAC
- thinkphp RBAC
- Thinkphp Rbac
- thinkphp——rbac
- THINKPHP RBAC 使用感想
- thinkphp RBAC 详解
- thinkphp RBAC 详解
- Thinkphp RBAC权限配置
- thinkphp的RBAC
- ThinkPHP RBAC功能小结
- [php] thinkphp RBAC解析
- thinkphp的RBAC
- ThinkPHP RBAC控制
- AC自动机 UVa11468
- cocos2d-x 2.1.4 使用python 创建项目指令:记录
- 利用hadoop mapreduce 做数据排序
- Qt一些小问题的解决方案
- PHP正则表达式
- THINKPHP RBAC
- android 项目编码修改,&nbsp…
- DEDECMS后台权限判定
- 安卓中事件绑定的写法
- PagerAdapter跟BaseAdapter的覆盖
- android上下文之间参数的传递与接…
- AJAX分页以及IFRAME载入
- settag跟gettag的两种用法
- andorid基础之点击事件绑定的几种…