[PHP]基于角色的访问控制RBAC
-------------------------------------------------------------------------------------------------------
RBAC(Role Based Access Control),意为基于角色的访问控制,这里用户不再拥有单独权限,而是与角色相关联,通过赋予角色权限,那么该用户也就拥有了这个角色的权限; 这里的角色可以也理解为用户组。
权限控制位置:在公共的控制器类的构造方法内,这样子类均需进行权限验证; 登录注册所在控制器可以不用继承,以CI框架为例:包含登录的控制器直接继承CI_Controller, 包含其他方法的控制器继承MY_Controller进行权限控制。
自定义的RBAC类,最终返回组装的数组格式,参考如下:
$access_list = array(
'auth'=>array(
'index'=>array(
[0]=>'index',
[1]=>'add',
),
'user'=>array(
[0]=>'index',
[1]=>'add',
[2]=>'delete',
),
),
);
三步骤 实现RBAC =>
一,需要的5张数据表如下:
用户表
角色表(用户组)
用户和角色关联表(便于存单个用户存多个角色; 否则要在用户表存roleid,多个值)
权限表(节点表:角色id,节点id,节点pid)
角色与权限关联表
(4张表实现的RABC是采用的单角色思路,可以省略掉“用户和角色关联表”,将角色id直接存入用户表,可以省掉一些代码量)
二,通过用户的id获取所有的节点权限:
1. 通过用户的id将用户的角色id查询出来,function getRoleId(){}
2. 通过用户的角色id来获取所有的节点id,function getNodeId(){}
3. 通过所有的节点id来获取节点名称,组装数组(也可存入session),function getNodes(){} function getNodeName(){}
三,验证权限:
通过$_GET['c']和$_GET['m']与$access_list['auth']中的进行对比,如果存在,拥有权限,否则无权限,进行踢出; 这里用到了函数array_key_exists()。
强调:登录退出在非公共的控制器内,不参与权限控制。
如果有使用了Ajax,那么同样可以验证,代码局部如下:
/**
|---------------------------------------------
|开启权限控制方法(以CI框架为例)
|@黑眼诗人 <www.farwish.com>
|---------------------------------------------
*/
protected function openCheck()
{
$this->load->library('rbac'); //加载rbac类
if( ! $this->rbac->access_check($id)) //rbac中access_check方法检测权限
{
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
{
echo '您没有权限!';exit; //Ajax请求返回值
}
else
{
redirect('admin/show_notice'); //重定向至提示页
}
}
}
你还可以在上述代码中加入判断,如:超级管理员角色不受限制,这样更符合权限系统的需求。
Link: http://www.cnblogs.com/farwish/p/3886805.html
@黑眼诗人 <www.farwishcom>
[PHP]基于角色的访问控制RBAC的更多相关文章
- 移动服务和 Azure Active Directory 中基于角色的访问控制
编辑人员注释:本文章由 Matthew Henderson撰写 去年 11月,我们发布了 Azure Active Directory (AAD) 预览版作为移动服务身份提供程序.此举旨在为企业开 ...
- Azure 门户中基于角色的访问控制入门
面向安全的公司应侧重于向员工提供他们所需的确切权限. 权限过多,可能会向攻击者公开帐户. 权限太少意味着员工无法有效地完成其工作. Azure 基于角色的访问控制 (RBAC) 可通过为 Azure ...
- RBAC基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- RBAC(Role-Based Access Control,基于角色的访问控制)
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- RBAC(Role-Based Access Control)基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role
<Windows Azure Platform 系列文章目录> 今天上午刚刚和客户沟通过,趁热打铁写一篇Blog. 熟悉Microsoft Azure平台的读者都知道,在老的Classic ...
- 基于角色的访问控制 (RBAC)权限管理
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- 普通程序员看k8s基于角色的访问控制(RBAC)
一.知识准备 ● 上一节描述了k8s的账户管理,本文描述基于角色的访问控制 ● 网上RBAC的文章非常多,具体概念大神们也解释得很详细,本文没有站在高屋建瓴的角度去描述RBAC,而是站在一个普通程序员 ...
- PHP RBAC权限管理 基于角色的访问控制演示
RBAC rbac:Role Based Access Controll,基于角色的访问控制. 今天理一理RBAC,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管 ...
随机推荐
- java基础阶段关于密码或账号字符数字的判断总结
将字符串转成字符数组 首字母判断 思路:应该如何获取首字母 arr[0]为数组第一个元素即是首字母 数字判断true为数字false为非数字 "0123456789".contai ...
- SSL&HTTPS简单介绍
这篇是最近看SSL和HTTPS的一个简单性总结,其中内容大部分都是参考网络上的内容,自己归纳整理了下. SSL介绍 HTTPS介绍 HTTP请求数据工作流程: l 用户在浏览器中输入网址,并告诉浏览 ...
- C#截取字符串按字节截取SubString
public static string CutByteString(string str,int len) { string result=string.Empty;// 最终返 ...
- python操作符与流程控制
操作符: 算术运算: + - * / % // ** 逻辑运算:and or not 身份运算: is not is 不可变数据类型:数字 字符串 字典key 可变数据 ...
- JQuery加载列表实现动画滚动(自上而下挤)
这个例子是jquery动态加载列表,并通过定时刷新,实现其循环滚动效果的一个例子. 1.HTML代码: <div class="fake-table"> <li ...
- SpringBoot项目启用本地Tomcat
1.修改pom.xml文件,配置<packaging>war</packaging>,使其发布的时候打包成war包 <groupId>com.owlforest&l ...
- (转)SVN搭建(附下载地址)
原文地址:http://blog.csdn.net/jiminull/article/details/7763795 一.SVN服务端 1.VisualSVN Server下载: http://dow ...
- 剑指Offer(三):从尾到头打印链表
说明: 1.本系列是根据<剑指Offer>这个系列做的一个小笔记. 2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难. 3.刚开始准备刷LeetCode.LintCode ...
- <Linux> 文件夹右下角有锁,解锁
sudo chown -R $USER 文件夹路径 例如:sudo chown -R $USER ~/scala
- Exchange 2010 OWA部分用户不能访问
Exchange 2010 OWA部分用户不能访问 http://blog.csdn.net/xuhuojun/article/details/17364619