首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Yii 1.x 權限控制三大方案:accessControl、Rights 擴展、混合模式

     編輯:PHP 相關知識

方案一:內建 accessControlFilter(簡單項目)

public function filters() { return ['accessControl']; }

public function accessRules() {
    return [
        ['allow', 'actions'=>['index','view'], 'users'=>['*']],      // 所有人
        ['allow', 'actions'=>['create','update'], 'users'=>['@']],   // 登錄用戶
        ['allow', 'actions'=>['admin','delete'], 'users'=>['admin']],// 指定用戶
        ['deny', 'users'=>['*']],                                     // 拒絕其餘
    ];
}

users 支持 *(所有人)、@(已登錄)、?(游客)、具體用戶名。亦可用 roles 配合 RBAC。

方案二:Rights 擴展(完整 RBAC)

public function filters() { return ['rights']; }

Rights 提供圖形化後台管理角色、任務、操作權限,適合中大型項目。需先遷移數據庫表並配置 authManager 組件。

方案三:混合模式(業務邏輯 + RBAC)

public function filters() {
    return [
        'updateOwn + update', // 僅 update 動作應用此過濾器
        'rights',             // 其他動作走 RBAC
    ];
}

public function filterUpdateOwn($filterChain) {
    $post = $this->loadModel();
    // 若用戶擁有 'PostUpdateOwn' 權限且是作者,移除 rights 過濾器放行
    if (Yii::app()->user->checkAccess('PostUpdateOwn', ['userid'=>$post->author_id])) {
        $filterChain->controller->filters()->removeAt(1); // 移除 rights
    }
    $filterChain->run();
}

適用場景:資源擁有者可編輯自己的內容,超級管理員走 RBAC 統一管理。

放行特定動作(如 API 回調)

public function allowedActions() { return 'autocomplete,autocomplete2'; }

選型建議

方案適用場景複雜度
accessControl簡單項目、少量角色、靜態權限低
Rights需後台可視化管理權限、多角色多層級中
混合模式資源所有權判斷 + RBAC 共存高
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved