Yii2:设置访问控制匹配回调

Yii2 : Setting Access Control matchcallback

我只想知道我是否可以这样做,这样我就不必一遍又一遍地重复相同的代码

[
  'allow' => true,
  'actions' => ['index', 'update', 'view', 'logout'],
  'roles' => ['@'],
  'matchCallback' => function(){
                        return (Yii::$app->user->identity->team_id == '47' && Yii::$app->user->identity->team_id == '62'
                        && Yii::$app->user->identity->team_id == '63' && Yii::$app->user->identity->team_id == '64'
                        && Yii::$app->user->identity->team_id == '65' && Yii::$app->user->identity->team_id == '66' && Yii::$app->user->identity->role_id == '1');
                    }
                ],

或类似的东西。

谢谢

首先,我不明白您为什么使用&& 而不是||。是打错了吗? 现在回答这个问题,我认为最好在模型中创建一个函数来表示您的身份,如下所示:(我相信您稍后会在其他地方需要它)

public function belongsToGroup()
{
    if( $this->team_id == '47' 
        || $this->team_id == '62' 
        ... 
        && $this->role_id == '1' ){
        return true;
    } else {
        return false;
    }

}

然后在授权控件中调用你的函数:

[
 'allow' => true,
 'actions' => ['index', 'update', 'view', 'logout'],
 'roles' => ['@'],
 'matchCallback' => function($rule, $action){
                    return Yii::$app->user->identity->belongsToGroup();
                   }
],