2017-10-11 60 views
0

我想要在一個行爲中使用多個規則。yii2:如何添加多個規則來訪問行爲

我該如何解決這個問題?

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => \yii\filters\AccessControl::className(), 
      'rules' => [ 
        [ 
        'actions' => ['file'], 
        'allow' => true, 
        'roles' => ['user2'], 
       ], 
        [ 
        'actions' => ['file'], 
        'allow' => false, 
        'roles' => ['document'], 
       ], 
      ], 
+0

您能否詳細說明您的要求。因爲我理解的文件應該只能訪問user2。這是你需要的嗎? – Sucharitha

回答

0

的問題是不是很清楚,但我覺得你想要做這樣的事情...

擴展AccesRule類並實現一個角色應如何訪問

class AccessRule extends \yii\filters\AccessRule { 
protected function matchRole($user) 
    { 
     if (empty($this->roles)) { 
      return true; // no roles defined = access ok 
     } 
     foreach ($this->roles as $role) { 
      // return true if role is allowed based on $user (define your logic) 
     } 
     return false; // no match, ie no access 
    } 
} 

那麼這個新的規則類添加到您AccessControl的...

'access' => [ 
    'class' => \yii\filters\AccessControl::className(), 
    'ruleConfig' => ['class' => '\my\namespace\AccessRule'], 
    'rules' => [ 
     ... 
    ], 
] 

注:代碼是沒有測試。