zoukankan      html  css  js  c++  java
  • 【PHP】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();  //次顶级权限

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

     

     

     

     

  • 相关阅读:
    数据库编程总结
    Excel文件操作方式比较
    大数据导入Excel
    导出Excel
    duilib库分析: 消息流程分析
    ucosII移植
    Log Parser Studio 分析 IIS 日志
    google 搜索关键字技巧
    未知的反物质世界的瞎想
    Scratch 简单的小游戏 --- 碰碰球
  • 原文地址:https://www.cnblogs.com/bc8web/p/5826881.html
Copyright © 2011-2022 走看看