代码之家  ›  专栏  ›  技术社区  ›  Sao Ho

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

  •  0
  • Sao Ho  · 技术社区  · 6 年前

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

    [
      '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');
                        }
                    ],
    

    或者类似的东西。

    谢谢你

    1 回复  |  直到 6 年前
        1
  •  1
  •   Francis Ngueukam    6 年前

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

    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();
                       }
    ],