2013-07-16 4 views
1

У меня проблема с контролем доступа. У меня есть правило: Yii framework: правила доступа не работают должным образом

array('deny', 
    'actions'=>array('index'), 
    'expression'=>'Yii::app()->user->isRegistered()', 
    'deniedCallback' => array(
     $this->render('//site/info',array(
      'message'=>'You must activate your account.' 
     ) 
    ),Yii::app()->end()), 
), 

функции:

public function isRegistered() 
{ 
    return (Yii::app()->user->isGuest) ? FALSE : $this->level == 1; 
} 

Если я войти в систему как администратор и у меня есть 3 уровня, isRegistered() возвращать ложь, но deniedCalback работает.

Как изменить это, чтобы выполнить обратный вызов только в том случае, если выражение истинно?

ответ

1

Необходимо указать обратный вызов как callable. Как вы его написали, он всегда будет выполнять код, который у вас есть в этом массиве. Вы должны лучше написать выделенный метод в контроллере.

array('deny', 
    'actions'=>array('index'), 
    'expression'=>'Yii::app()->user->isRegistered()', 
    'deniedCallback' => array($this, 'accessDenied'), 
), 

// ... 

public function accessDenied() 
{ 
    $this->render('//site/info', array(
     'message' => 'You must activate your account.' 
    )); 
    Yii::app()->end(); // not really neccessary 
} 
+0

Это работает! –

Смежные вопросы