thinkphp中的rbac权限控制数据库的全面解析(个人笔记)
来源:互联网 发布:mac玩刺客信条卡怎么办 编辑:程序博客网 时间:2024/06/05 11:11
之前做的一些网站,权限控制都是自己来写的,虽然不难,但是安全性不高,用thinkphp里扩展的rbac权限控制,就能够很容易达到一种多权限控制的目的,而且安全性也比较高,下面我来跟大家详细讲一下rbac里面数据库的一些重点内容
rbac数据库有5个表,重点的表内容会有文字说明,等下我会把sql语句贴出
think_user表,用户表
id:用户id
name:用户名
password:用户密码
think_role表,用户组表
id:用户id
name:用户组名字
pid:用户组父id
status:状态,1开启,0关闭
think_node表,节点表
id:节点id
name:项目or模板or方法名称(注意大小写)
pid:节点父id(区分方法重名)
level:节点等级,1-》项目,2-》模板,3-》方法
status:状态
think_role_user表,用户组和用户对应关系表
role_id:用户组id
user_id:用户id
think_access表,用户组和节点对应的表
role_id:用户组id
node_id:节点id
level:节点等级
pid:节点父id
看图片有助于理解各个表之间的关系
使用的时候,记得要把status设为1,默认是0,不然也会提示没有权限的
下面贴一些代码,有注释
判断是否登录的代码,方法名是_initialize,如果其他类继承这个类,就会默认加载这个方法,达到权限判断的目的
<?php
//所有权限验证的类都需要继承这个类
class BaseAction extends Action{
//这是thinkphp中自带的一个始使化方法,加载类的时候会首先调有和这个方法
function _initialize(){
//header发送头信息,页面编码为utf=8格式
header("Content-Type:text/html; charset=utf-8");
//判断是否开始了用户认证,C()是快速读取配置文件的方法,MODEL_NAME是当前模块的名称,
//通过in_array函数检测当前调用的模块是否在不需要验证的验块中,如果是的话,取反,不进行验证。
if(C('USER_AUTH_ON') && !in_array(MODULE_NAME,explode(',',C('NOT_AUTH_MODULE')))){
//调用thinkphp自带的RBAC类
import('ORG.Util.RBAC');
//通过RBAC类中的AccessDecision获取与权限相关的信息,如果没有获取到则执行以下部份
if(!RBAC::AccessDecision()){
//获取SESSION中的用户标识号,如果没有则用户没有登陆
if(!$_SESSION[C('USER_AUTH_KEY')]){
$this->assign('jumpUrl',__APP__.'/Public/login');
$this->error('对不起,你没有登录!请重新登录');
}
//检测是否开始了游客认证方式
if(C('GUEST_AUTH_ON')){
}
//通过$this->error方法弹出错误_VALID_ACCESS_为THINKPHP已设定好的与访问//控制有关的错误提示.采用L()方式来进行读取。
$this->error(L('_VALID_ACCESS_'));
}
}
}
}
?>
登出和判断密码是否正确的代码
<?php
class PublicAction extends Action {
//如果输入的是index的话也让其显示login页的模版
function index(){
$this->display('login');
}
//退出动作
public function logout()
{
//检测是否设置了USER_AUTH_KEY
if(isset($_SESSION[C('USER_AUTH_KEY')])) {
//删除USER_AUTH_KEY
unset($_SESSION[C('USER_AUTH_KEY')]);
//注稍这个session_id所有的内容
unset($_SESSION);
//调用session_destory()删除所有内容
session_destroy();
//设置退出成功的跳转页
$this->assign("jumpUrl",__URL__.'/login/');
$this->success('登出成功!');
}else {
$this->error('已经登出!');
}
}
// 登录检测的方法,登陆表单中的action地址需要写这一个地址
public function checkLogin() {
//如果用户名密码(可在此外加验证码)为空则直接阻止用户访问
if(empty($_POST['username'])) {
$this->error('帐号错误!');
}elseif (empty($_POST['password'])){
$this->error('密码必须!');
}
//生成认证条件
$map = array();
// 支持使用绑定帐号登录,将获得到用户名放到$map中
$map['username'] = $_POST['username'];
//加载RBAC类
import ( 'ORG.Util.RBAC' );
//通过authenticate去读取出来所有的用户信息,仅传用户名即可
$authInfo = RBAC::authenticate($map);
//使用用户名、密码和状态的方式进行认证
//如果没有获取到信息
if(false === $authInfo) {
$this->error('帐号不存在或已禁用!');
}else {
//通过$authinfo获取的信息与post当中的md5密码进行对比
if($authInfo['password'] != md5($_POST['password'])) {
$this->error('密码错误!');
}
//激活用户标识号
$_SESSION[C('USER_AUTH_KEY')] = $authInfo['id'];
//如果用户标识号是管理员,则激活管理员标识,具有一切可访问权限
if($authInfo['account']=='admin') {
$_SESSION['administrator'] = true;
}
// 通过RBAC类中的静态方法saveAccessList缓存访问权限
RBAC::saveAccessList();
$this->success('登录成功!');
}
}
}
?>
需要sql文件请留邮箱!115rbac
- thinkphp中的rbac权限控制数据库的全面解析(个人笔记)
- ThinkPHP的RBAC权限控制
- (ThinkPHP 1.5)基于RBAC的权限访问控制-实例解析
- Thinkphp中RBAC的权限控制在关的数据库详解(RBAC详解之连载1)
- ThinkPHP的RBAC(基于角色权限控制)详解
- ThinkPHP的RBAC(基于角色权限控制)详解
- ThinkPHP的RBAC(基于角色权限控制)详解
- ThinkPHP的RBAC(基于角色权限控制)详解
- ThinkPHP的RBAC(基于角色权限控制)详解
- ThinkPHP的RBAC(基于角色权限控制)详解
- Thinkphp中RBAC的权限控制之配置文件(RBAC详解之连载2)
- Thinkphp中RBAC的权限控制之配置文件(RBAC详解之连载3)
- 继续摘抄:(ThinkPHP 1.5)基于RBAC的权限访问控制-实例解析
- Thinkphp的RBAC,基于角色的权限控制
- ThinkPHP中RBAC的权限控制之配置文件2
- Thinkphp的RBAC权限管理
- THINKPHP 的 RBAC 权限总结
- ThinkPHP 中权限管理控制(RBAC)
- 一个对大小固定的内存数据进行操作的简单类
- Linux下常见命令
- yii数据库查询自学笔记--命名空间
- ViewFilpper 实现页面切换
- iOS开发准备——资源推荐
- thinkphp中的rbac权限控制数据库的全面解析(个人笔记)
- vc2012的c++0x特性对std::move的支持测试
- switch language
- SharePoint 2010 移除Ribbon菜单中的命令项
- iOS开发经验总结—内存管理
- Android内存优化
- Hiding the SharePoint 2010 Ribbon Buttons via jQuery
- rep stos dword ptr es:[edi] 是做什么的?
- PAT 1028. List Sorting (25) 重写sort 函数中的cmp