[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,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管 ...
随机推荐
- Centos7 配置ssh连接
Centos7 配置ssh连接 1.检查是否安装openssh-server:#yum list installed | grep openssh-server 安装openssh-server:#y ...
- [SQL]卸载数据库清理注册表方法regedit
.打开注册表. 开始——运行——regedit——确定 .然后找到下面的文件夹,删除掉: HKEY_CURRENT_USER\ Software\ Microsoft\ Microsoft SQL S ...
- 2018北美部分CS项目学费
yearly cost from official website USC 城里 24credit about 49k + cost of room&food BU 城里 NEU 65k 城里 ...
- VS2008自定义快捷键设置
点[Keyboard..]
- 文件IO-Linux
pcb:结构体 一个进程由一个文件描述符表:1024,前三个占用,文件描述符作用,需要磁盘文件. 1:open.close int open(const char* pathname,int flag ...
- hashlib configparser模块
算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常 ...
- 基于IDEA环境下的Spark2.X程序开发
我们选择在线安装 这个是windows下的scala,直接双击安装就可以了 安装好之后可以验证一下 这个是我本地的jdk1.8安装包,直接双击安装 安装完成后可以验证一下 https://archiv ...
- jQuery插件——下拉选择框
其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件. 既然是jQuery插件,那么必然是依赖jQuery的了. 老规矩,直接上代码吧! ;(function () { $. ...
- #151: 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-x
试题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位 ...
- vue生命周期理解图
............................... 它可以总共分为8个阶段: beforeCreate(创建前), created(创建后), beforeMount(载入前), moun ...