您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“ThinkPHP項目組的權限怎么設置”,內容詳細,步驟清晰,細節處理妥當,希望這篇“ThinkPHP項目組的權限怎么設置”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
一、認識ThinkPHP權限設置
權限設置是指為用戶分配操作權限,使其能夠按照權限范圍進行操作。在ThinkPHP框架中,權限的設置可以通過RBAC(Role-Based Access Control,基于角色的訪問控制)方式實現。RBAC基于角色的訪問控制是指給用戶分配角色,而角色再分配權限的一種訪問控制模型。RBAC具備如下特點:
將權限授權給角色,再將角色賦予用戶,方便管理;
用戶只需要擁有角色,就能擁有角色所擁有的所有權限;
系統易于擴展和維護,具有良好的可擴展性;
實現了權限與業務邏輯分離,顯著提高了代碼復用率和訪問安全性。
二、基于RBAC的權限設置步驟
Step 1 創建權限表
在數據庫中創建一張權限表,包含字段id、name、title和status;
id和name字段是主鍵和權限標識;
title字段是權限名稱;
status字段是權限狀態,1代表啟用,0代表禁用。
Step 2 創建角色表
在數據庫中創建一張角色表,包含字段id、name、title和status;
id和name字段是主鍵和角色標識;
title字段是角色名稱;
status字段是角色狀態,1代表啟用,0代表禁用。
Step 3 創建用戶表
在數據庫中創建一張用戶表,包含字段id、username、password和status;
id字段是主鍵;
username是用戶名;
password是密碼;
status表示用戶狀態,1代表啟用,0代表禁用。
Step 4 建立用戶角色關聯表
在數據庫中創建一張用戶角色關聯表,包含字段user_id和role_id;
user_id是用戶標識;
role_id是角色標識。
Step 5 建立角色權限關聯表
在數據庫中創建一張角色權限關聯表,包含字段role_id和rule_id;
role_id是角色標識;
rule_id是權限標識。
Step 6 實現權限控制
在ThinkPHP項目中,實現權限控制的方法如下:
在項目中定義公共控制器CommonController,該控制器可以實現對所有用戶的權限控制;
創建Auth類實現權限驗證;
在CommonController類中進行權限控制,如下所示:
public function _initialize(){ if(!authcheck()){ } } public function authcheck(){ $auth=new Auth; if($auth->check(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME,session('uid'))){ return true; }else{ return false; } }
在Auth類中,實現了權限驗證的邏輯,如下所示:
class Auth { //檢查權限 public function check($name, $uid){ if(in_array($uid, C('AUTH_SUPER_ADMIN'))){ return true; } $infos=M('user')->field('role_id')->where('id='.$uid)->find(); $role_id=$infos['role_id']; $rules=M('access')->where('role_id='.$role_id)->select(); foreach($rules as $v){ $rule_ids[]=$v['rule_id']; } $rules=M('rule')->where('id in ('.implode(',',$rule_ids).')')->select(); foreach($rules as $r){ $urls[]=$r['name']; } if(in_array($name,$urls)){ return true; }else{ return false; } } }
以上代碼實現的邏輯是為用戶的所有操作請求添加權限驗證。如果用戶請求的操作需要權限控制,則驗證器會首先檢查該用戶是否為超級管理員。如果用戶為超級管理員,則直接通過檢驗;如果用戶不是超級管理員,則根據用戶的角色ID(從用戶表中查詢)查找該角色所擁有的權限ID列表(從關聯表中查詢),然后根據權限ID列表查找對應的權限名稱列表;如果請求的操作名稱在權限名稱列表之中,則通過驗證;反之,則權限驗證失敗。
讀到這里,這篇“ThinkPHP項目組的權限怎么設置”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。