RBAC 基于角色的访问控制演示

RBAC



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

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

功能需求:

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

实现

建表(我们需要三个表,管理员表、角色表、权限表,tip:也可用其它建表方式)

管理员表

权限表

角色表

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

管理员表

权限表

角色表

功能一实现-无限极权限分类



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

不懂的看我另一篇博文有写不使用递归实现无限极,这里就不多说了

功能二实现-角色管理分配权限



页面实现

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

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

返回数组

接下来拼接字段role_auth_ac,通过get过来的角色id更新数据库

 1     public function saveAuth($arr,$role_id){
 2         $str = implode(‘,‘,$arr);
 3         $str = rtrim($str);
 4
 5         $auth_info = D(‘Auth‘)->select($str);
 6         $s = ‘‘;//用于拼接 role_auth_ac 字段
 7         foreach($auth_info as $v){
 8             if(!empty($v[‘auth_c‘]) && !empty($v[‘auth_a‘])){
 9                  $s .= $v[‘auth_c‘] .‘-‘. $v[‘auth_a‘].‘,‘;
10             }
11         }
12         $s = rtrim($s,‘,‘);
13         $sql = "update jy_role set role_auth_ids = ‘$str‘,role_auth_ac = ‘$s‘ where role_id = $role_id";
14         return $this->execute($sql);
15     }

功能三实现-管理员属于的角色



功能四/五 实现-登录左侧显示所拥有权限



比如我现在用另一个账号登录,(只显示他有的权限)

基本思想就是,首先登录后将管理员的角色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();  //次顶级权限

后记:只是大致笼统粗糙的说了下流程,有需要源码和有问题的可以私我!

时间: 2024-08-02 06:58:58

RBAC 基于角色的访问控制演示的相关文章

Yii2.0中文开发向导——RBAC(基于角色的访问控制权限)表结构原理分析

这里有几个概念很重要,我简单用大白话说一下;权限:就是指用户是否可以执行哪些操作.如:小张可以发帖.回帖.浏览,小红只能回帖.浏览角色:就是上面说的一组操作的集合.如:高级会员有发帖.回帖.删贴.浏览的权限,普通会员只有回帖.浏览的权限.比如小张是高级会员,那么他就可以执行发帖.回帖.删贴.浏览.而小红是普通会员,所以它就只能回帖.浏览.另外角色还可以继承,中级会员除了普通会员的回帖.浏览功能外,还可以发帖.也就是说在普通会员的基础上又增加了一个发帖的权限.在Yii2.0中 yii\rbac:

RBAC 基于角色的访问控制

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系.(如下图) 角色是什么?可以理解为一定数量的权限的集合,权限的载体.例如:一个论坛系统,"超级管理员"."版主"都是角色.版主可管理版内的帖子.可管理版内的用户等,

RBAC基于角色的访问控制

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系.(如下图) 角色是什么?可以理解为一定数量的权限的集合,权限的载体.例如:一个论坛系统,"超级管理员"."版主"都是角色.版主可管理版内的帖子.可管理版内的用户等,

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

本文只讨论两种基于角色的访问控制的不同点,不涉及权限设计的数据库设计. 基于角色的访问控制(Role-Based Access Control)可分为隐式角色访问控制和显式角色访问控制. 隐式角色访问控制:没有明确定义一个角色到底包含了哪些可执行的行为. 显式角色访问控制:也称为"基于资源的访问控制",因为这种权限设计的粒度细化到了资源层面,资源有很多种,比如数据库表的增删查改.url.菜单.按钮等等. 来看一个隐式角色访问控制的例子: if (user.hasRole("P

Yii中 RBAC(基于角色的访问控制权限)表结构原理分析

这里有几个概念很重要,我简单用大白话说一下; 权限:就是指用户是否可以执行哪些操作. 如:小张可以发帖.回帖.浏览,小红只能回帖.浏览 角色:就是上面说的一组操作的集合. 如:高级会员有发帖.回帖.删贴.浏览的权限,普通会员只有回帖.浏览的权限.比如小张是高级会员,那么他就可以执行发帖.回帖.删贴.浏览.而小红是普通会员,所以它就只能回帖.浏览. 另外角色还可以继承,中级会员除了普通会员的回帖.浏览功能外,还可以发帖.也就是说在普通会员的基础上又增加了一个发帖的权限. 在Yii2.0中 yii\

基于角色的访问控制RBAC

------------------------------------------------------------------------------------------------------- RBAC(Role Based Access Control),意为基于角色的访问控制,这里用户不再拥有单独权限,而是与角色相关联,通过赋予角色权限,那么该用户也就拥有了这个角色的权限; 这里的角色可以也理解为用户组. 权限控制位置:在公共的控制器类的构造方法内,这样子类均需进行权限验证; 

Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role

<Windows Azure Platform 系列文章目录> 今天上午刚刚和客户沟通过,趁热打铁写一篇Blog. 熟悉Microsoft Azure平台的读者都知道,在老的Classic Portal里面,我们可以设置共同管理员(Co-admin). 参考:Windows Azure Active Directory (3) China Azure AD增加新用户 但是Co-Admin和服务管理员(Service Admin)的权限是一样的. 比如上图的admin创建的任何资源,是可以被ne

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

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系.(如下图) 角色是什么?可以理解为一定数量的权限的集合,权限的载体.例如:一个论坛系统,"超级管理员"."版主"都是角色.版主可管理版内的帖子.可管理版内的用户等,

RBAC (基于角色的访问控制)

基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色.角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收.角色与角色的关系可以建立起来以囊括更广