2016-02-15 26 views
2

我如何在一個地方檢查權限?
我不想單獨檢查每個功能。Yii2 RBAC檢查權限沒有控制器中的每個動作

我的RBAC控制器。 我想檢查控制器中所有操作的登錄用戶權限。現在,我必須在控制器

$admin = $auth->createRole('Admin'); 
$moderator = $auth->createRole('Moderator'); 

$createPost=$auth->createPermission('createPost'); 
$updatePost=$auth->createPermission('updatePost'); 
$deletePost=$auth->createPermission('deletePost'); 
$createCategory=$auth->createPermission('createCategory'); 
$updateCategory=$auth->createPermission('updateCategory'); 
$deleteCategory=$auth->createPermission('deleteCategory'); 


$auth->add($admin); 
$auth->add($moderator); 
$auth->add($createPost); 
$auth->add($updatePost); 
$auth->add($deletePost); 
$auth->add($createCategory); 
$auth->add($updateCategory); 
$auth->add($deleteCategory); 

在這裏,我分配的權限角色單獨使用Yii::$app->user->can('...')每個動作,但由於行爲手動編寫我從來沒有使用這些權限 - >(如你的例子)

什麼是目標,在RBAC中創建許可,如果這不起作用?如果我想添加高級用戶。我只能在控制器中添加動作actionPremium併爲高級用戶設置行爲操作。

e.g

行動=> [ '溢價'] 角色=> [ 'premiumUser']

和一個問題。 行爲如何自定義消息錯誤?

$auth->addChild($admin,$moderator); 
$auth->addChild($admin,$createCategory); 
$auth->addChild($admin,$updateCategory); 
$auth->addChild($admin,$deleteCategory); 
$auth->addChild($moderator, $createPost); 
$auth->addChild($moderator, $updatePost); 
$auth->addChild($moderator, $deletePost); 


$auth->assign($admin,1); 
$auth->assign($moderator,2); 

回答

4

您可以指定在控制器允許

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'rules' => [ 
       [ 
        'actions' => ['index','view'], // these action are accessible 
                //only the yourRole1 and yourRole2 
        'allow' => true, 
        'roles' => ['yourRole1', 'yourRole2'], 
       ], 
       [ // all the action are accessible to superadmin, admin and manager 
        'allow' => true, 
        'roles' => ['superAdmin', 'admin', 'manager'], 
       ], 
      ], 
     ],   
     'verbs' => [ 
      'class' => VerbFilter::className(), 
      'actions' => [ 
       'delete' => ['post'], 
      ], 
     ], 
    ]; 
} 

你的角色的行爲在指定行爲的所有行動的權限是動作.. allowd或拒絕..如果將一個角色已經允許的在行爲動作那麼他就可以執行,否則他得到許可被拒絕403 ..(未授權)..

您還可以檢查在程序代碼中的作用與

if (Yii::$app->User->can('admin')){ 
    ..... 
    yourdCode 
    .... 
} 
+0

好的,我明白了,但告訴我,在我的例子中,RBAC的創建權限是什麼。 createPost,updatePost等,然後將她與表auth_item_child中的角色關聯起來? 如果我可以手動編寫需要操作?你能解釋我嗎? – Demolog

+0

@Demolog請用更詳細的方式解釋你的目標,我不太明白(最終編輯你的問題..) – scaisEdge

+0

我編輯了問題 – Demolog

相關問題