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();  //次頂級權限

后記:只是大致籠統粗糙的說了下流程,有需要源碼和有問題的可以私我!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM