ThinkPHP項目組的權限怎么設置

一、認識thinkphp權限設置

權限設置指的是根據用戶的權限范圍,進行操作權限分配,以使其能夠進行相應的操作。在ThinkPHP框架中,權限的設置可以通過RBAC(Role-Based Access Control,基于角色的訪問控制)方式實現。角色基礎訪問控制(RBAC)是一種訪問控制模型,其基于角色而非用戶進行權限分配,并且通過分配角色來授予用戶訪問權限。RBAC具備如下特點:

  1. 將權限授權給角色,再將角色賦予用戶,方便管理;

  2. 用戶只需要擁有角色,就能擁有角色所擁有的所有權限;

    立即學習PHP免費學習筆記(深入)”;

  3. 系統易于擴展和維護,具有良好的可擴展性;

  4. 實現了權限與業務邏輯分離,顯著提高了代碼復用率和訪問安全性。

二、基于RBAC的權限設置步驟

Step 1 創建權限表

  1. 在數據庫中創建一張權限表,包含字段id、name、title和status;

  2. id和name字段是主鍵和權限標識;

  3. title字段是權限名稱;

  4. status字段是權限狀態,1代表啟用,0代表禁用。

Step 2 創建角色表

  1. 在數據庫中創建一張角色表,包含字段id、name、title和status;

  2. id和name字段是主鍵和角色標識;

  3. title字段是角色名稱;

  4. status字段是角色狀態,1代表啟用,0代表禁用。

Step 3 創建用戶表

  1. 在數據庫中創建一張用戶表,包含字段id、username、password和status;

  2. id字段是主鍵;

  3. username是用戶名;

  4. password是密碼;

  5. status表示用戶狀態,1代表啟用,0代表禁用。

Step 4 建立用戶角色關聯表

  1. 在數據庫中創建一張用戶角色關聯表,包含字段user_id和role_id;

  2. user_id是用戶標識;

  3. role_id是角色標識。

Step 5 建立角色權限關聯表

  1. 在數據庫中創建一張角色權限關聯表,包含字段role_id和rule_id;

  2. role_id是角色標識;

  3. rule_id是權限標識。

Step 6 實現權限控制

在ThinkPHP項目中,實現權限控制的方法如下:

  1. 在項目中定義公共控制器CommonController,該控制器可以實現對所有用戶的權限控制;

  2. 創建Auth類實現權限驗證;

  3. 在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; ????} }
  1. 在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列表查找對應的權限名稱列表;如果請求的操作名稱在權限名稱列表之中,則通過驗證;反之,則權限驗證失敗。

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享