2012-04-17 4 views
2

で関数をコールバックにYiiのAccessRulesパスパラメータは、私が</p> <p>はモジュール全体にだけでなく、特定のアクションにユーザーを制限する必要があるベースYIIモジュールでアプリケーションを開発しています表現

私が使用してユーザを制限することができました'expression' + callbackをルールに入れましたが、私は2つの異なるアクションに対して同じコールバック関数を使用したいと思います。つまり、パラメータ値を取得するコールバック関数があり、実行するアクションを評価することによって、ここではまだ行っています。

public function accessRules() 
    { 
     return array(
      array('allow', // allow all users to perform 'index' and 'view' actions 
       'actions'=>array('index'), 
       'users'=>array('*'), 
       'expression'=>array($this, "checkAccessRule"), 
      ), 
      array('allow', // allow all users to perform 'index' and 'view' actions 
       'actions'=>array('login'), 
       'users'=>array('?'), 
      ), 
      array('allow', // allow authenticated user to perform 'create' and 'update' actions 
       'actions'=>array('view','create','update','admin','delete'), 
       'users'=>array('@'), 
       'expression'=>array($this, "checkAccessRule"), 
      ), 
      array('deny', // deny all users 
       'users'=>array('*'), 

      ), 
     ); 
    } 

コールバックからこの「$オペアンプ」を取得することができませんでしたコールバック関数

function checkAccessRule($op){ 
     if($op == 1){ 
      if(in_array($this->module->getName(), Yii::app()->user->getState("companyModules"))) 
       return true; 
      return false; 
     }elseif($op == 2){ 
      if((Yii::app()->user->getState("user_role") == 1) && (in_array($this->module->getName(), Yii::app()->user->getState("companyModules")))) 
       return true; 
      return false; 
     } 
    } 

私はそれを送信する場合、あなたが述べるとき'expression'=>array($this, "checkAccessRule(1)"),

任意のヘルプは、動作しません

答えて

1

をいただければ幸いです関数名はYiiを介して文字列として呼び出されるので、(1)は関数名の一部として扱われます。あなたにとってラッキーなことに、expressionパラメーターは無名関数も受け入れます(function(){})。 so:

public function accessRules() 
{ 
    return array(
     array('allow', // allow all users to perform 'index' and 'view' actions 
      'actions'=>array('index'), 
      'users'=>array('*'), 
      'expression'=>function(){$this->checkAccessRule(1)}, 
     ), 
     array('allow', // allow all users to perform 'index' and 'view' actions 
      'actions'=>array('login'), 
      'users'=>array('?'), 
     ), 
     array('allow', // allow authenticated user to perform 'create' and 'update' actions 
      'actions'=>array('view','create','update','admin','delete'), 
      'users'=>array('@'), 
      'expression'=>function(){$this->checkAccessRule(1)},, 
     ), 
     array('deny', // deny all users 
      'users'=>array('*'), 

     ), 
    ); 
} 

+0

ありがとうございました、それはビットの変更と一緒に働いた:) – Junaid

関連する問題