RBAC


rbac:Role Based Access Controll,基于角色的访问控制。

今天理一理RBAC,话不多说,直接切入主题

功能需求:

  1. 权限管理(无限极)
  2. 角色管理(可以分配权限)
  3. 管理员管理(管理员属于哪些角色)
  4. 后台左侧显示当前登录用户所拥有的权限
  5. 超级管理员拥有所有权限

实现

建表(我们需要三个表,管理员表、角色表、权限表,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权限管理 基于角色的访问控制演示的更多相关文章

  1. RBAC(基于角色的访问控制)用户权限管理数据库设计

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  2. 基于角色的访问控制 (RBAC)权限管理

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  3. YIi 权限管理和基于角色的访问控制

    验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...

  4. RBAC基于角色的访问控制

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  5. RBAC(Role-Based Access Control,基于角色的访问控制)

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  6. RBAC(Role-Based Access Control)基于角色的访问控制

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  7. 普通程序员看k8s基于角色的访问控制(RBAC)

    一.知识准备 ● 上一节描述了k8s的账户管理,本文描述基于角色的访问控制 ● 网上RBAC的文章非常多,具体概念大神们也解释得很详细,本文没有站在高屋建瓴的角度去描述RBAC,而是站在一个普通程序员 ...

  8. 十二、基于Django实现RBAC权限管理

    一.RBAC概述 RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定权限,然后给用户划分角色. 从企业的角度来说,基本上是按照角色来划分职能.比如,CEO ...

  9. RBAC 基于角色的访问控制

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

随机推荐

  1. 转---tcp三次握手四次挥手syn fin......

    http://blog.chinaunix.net/uid-22312037-id-3575121.html转自 一.TCP报文格式        TCP/IP协议的详细信息参看<TCP/IP协 ...

  2. python之生产者消费者模型

    #Auther Bob #--*--conding:utf-8 --*-- #生产者消费者模型,这里的例子是这样的,有一个厨师在做包子,有一个顾客在吃包子,有一个服务员在储存包子,这个服务员我们就可以 ...

  3. 实验1:c++简单程序设计(1)

    //文中有格式错误请无视 //这个编辑器一言难尽 实验目的 1. 掌握c++中类c部分的编程知识: 数据类型,常量,变量,运算符,表达式,分支结构,循环结构 2. 掌握C++中数据输入和输出的基本方法 ...

  4. https://www.w3.org/

    W3C   W3C By Region All Australia Österreich (Austria) België (Belgium) Botswana Brasil (Brazil) 中国 ...

  5. centos 6.5 安装mysql

    步骤1: yum -y install mysql-server 步骤2: chkconfig mysqld on 步骤3: service mysqld start mysql -u root se ...

  6. 2018.09.08 bzoj1531: [POI2005]Bank notes(二进制拆分优化背包)

    传送门 显然不能直接写多重背包. 这题可以用二进制拆分/单调队列优化(感觉二进制好写). 所谓二进制优化,就是把1~c[i]拆分成20,21,...2t,c[i]−2t+1+1" role= ...

  7. UVa 10340 All in All (水题,匹配)

    题意:给定两个字符串,问第一个串能不能从第二个串通过删除0个或多个字符得到. 析:那就一个字符一个字符的匹配,如果匹配上了就往后走,判断最后是不是等于长度即可. 代码如下: #include < ...

  8. python编码(三)

    python 有str object 和 unicode object 两种字符串,都可以存放字符的字节编码,但是他们是不同的type,这一点很重要,也是为什么会有encode(编码)和decode( ...

  9. (并查集)小希的迷宫 --HDU -- 1272

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  10. stdafx.h、stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编

    sstdafx.h.stdafx.cpp是干什么用的?为什么我的每一个cpp文件都必须包含stdafx.h? Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要 ...