PHP RBAC权限管理 基于角色的访问控制演示
RBAC
rbac:Role Based Access Controll,基于角色的访问控制。
今天理一理RBAC,话不多说,直接切入主题
功能需求:
- 权限管理(无限极)
- 角色管理(可以分配权限)
- 管理员管理(管理员属于哪些角色)
- 后台左侧显示当前登录用户所拥有的权限
- 超级管理员拥有所有权限
实现
建表(我们需要三个表,管理员表、角色表、权限表,tip:也可用其它建表方式)
管理员表

权限表

角色表

我制作完的三张表的CRUD,后台首页效果展示(具体的增删改查就不列步骤了):
管理员表

权限表

角色表

功能一实现-无限极权限分类
在这里实现无限极分类不是通过递归,而是通过建表时候多加的一个字段 auth_path

不懂的看我另一篇博文有写不使用递归实现无限极,这里就不多说了
功能二实现-角色管理分配权限

页面实现

视图显示没有什么可说的,有需要源码的、有问题的留言,收集表单信息(tp代码示意)


然后我们讲得到的数组转换成字符串,通过字符串查询所有权限信息

返回数组

接下来拼接字段role_auth_ac,通过get过来的角色id更新数据库
public function saveAuth($arr,$role_id){
$str = implode(',',$arr);
$str = rtrim($str);
$auth_info = D('Auth')->select($str);
$s = '';//用于拼接 role_auth_ac 字段
foreach($auth_info as $v){
if(!empty($v['auth_c']) && !empty($v['auth_a'])){
$s .= $v['auth_c'] .'-'. $v['auth_a'].',';
}
}
$s = rtrim($s,',');
$sql = "update jy_role set role_auth_ids = '$str',role_auth_ac = '$s' where role_id = $role_id";
return $this->execute($sql);
}
功能三实现-管理员属于的角色

功能四/五 实现-登录左侧显示所拥有权限
比如我现在用另一个账号登录,(只显示他有的权限)
基本思想就是,首先登录后将管理员的角色id获得,不同的角色id根据数据库里的数据显示不同权限菜单,如下,我的jy_test只有两个权限

视图中显示如下

tp代码示意
$admin_id = session("admin_info['admin_id']");//管理员id
$admin_info = D('Admin')->find($admin_id);//管理员信息
$role_id = $admin_info['role_id'];//管理员角色id
//角色信息
$role_info = M('Role')->find($role_id);
//角色拥有的权限字符串
$auth_ids = $role_info['role_auth_ids'];
if($role_id === 0){
//超级管理员获取所有权限菜单
$auth_infoA = M('Auth')->where("auth_level = 0")->select(); //顶级权限
$auth_infoB = M('Auth')->where("auth_level = 1")->select(); //次顶级权限
}else{
$auth_infoA = M('Auth')->where("auth_level = 0 and auth_id in ($auth_ids)")->select(); //顶级权限
$auth_infoB = M('Auth')->where("auth_level = 1 and auth_id in ($auth_ids)")->select(); //次顶级权限
后记:只是大致笼统粗糙的说了下流程,有需要源码和有问题的可以私我!
PHP RBAC权限管理 基于角色的访问控制演示的更多相关文章
- RBAC(基于角色的访问控制)用户权限管理数据库设计
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- 基于角色的访问控制 (RBAC)权限管理
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- YIi 权限管理和基于角色的访问控制
验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...
- 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,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- 普通程序员看k8s基于角色的访问控制(RBAC)
一.知识准备 ● 上一节描述了k8s的账户管理,本文描述基于角色的访问控制 ● 网上RBAC的文章非常多,具体概念大神们也解释得很详细,本文没有站在高屋建瓴的角度去描述RBAC,而是站在一个普通程序员 ...
- 十二、基于Django实现RBAC权限管理
一.RBAC概述 RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定权限,然后给用户划分角色. 从企业的角度来说,基本上是按照角色来划分职能.比如,CEO ...
- RBAC 基于角色的访问控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
随机推荐
- 19-Javaweb项目读取本地图片通过虚拟路径
有时会把文件存在本地如将图片等放在c.d盘等,在javaweb引用时会出现无法直接访问的问题,但是还是有办法解决的. 可以通过配置虚拟路径: 步骤一: 双击servers下面的tomcat, 在弹出的 ...
- Spring整合JMS——事务管理
Spring提供了一个JmsTransactionManager用于对JMS ConnectionFactory做事务管理.这将允许JMS应用利用Spring的事务管理特性.JmsTransactio ...
- JAVA list集合两种去重方法
结果: 转载地址:http://geek.csdn.net/news/detail/127940
- Java数据结构和算法(一)线性结构
Java数据结构和算法(一)线性结构 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 线性表 是一种逻辑结构,相同数据类型的 ...
- Netty 系列(三)Netty 入门
Netty 系列(三)Netty 入门 Netty 是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序.更多请参考:Netty Github 和 Netty中文 ...
- 旅游类APP原型模板分享——爱彼迎
这是一款专为游客提供全球范围内短租服务的APP,可以让你不论出门在外或在家附近都能开展探索之旅,并且还可以获取世界各地独特房源.当地体验及好去处等相关信息. 这款APP层级清晰简明,此原型模板所用到的 ...
- 【附源文件】日记类App原型制作分享-Grid Diary
Grid Diary是一款非常受文艺青年喜爱的记录应用,它设计简单,内容却非常丰富.它不再是单调的文字记录,界面的设计非常与众不同,由许多格子拼凑而成,每一个格子里面还带有一个问题,十分有趣.提到格子 ...
- 测试这个才可以打包 我的PYQt matplotlib numpy 等程序
from distutils.core import setup import py2exe import matplotlib import sys import FileDialog import ...
- 构造函数constructor 与析构函数destructor(三)
(1)构造函数初始化列表: 1 class Test{ 2 int i; 3 public: 4 Test(int vi):i(vi){}//这里的从冒号开始,到右大括号结束,这一段是构造函数初始化列 ...
- 2018.09.26 洛谷P2464 [SDOI2008]郁闷的小J(map+vector)
传送门 本来出题人出出来想考数据结构的. 但是我们拥有map+vector/set这样优秀的STL,因此直接用map离散化,vector存下标在里面二分找答案就行了. 代码: #include< ...