Задать вопрос
@easycode
не боюсь задавать глупые вопросы ))

В Yii 1.x навесить hook на проверку прав доступа к действию контролера?

Возможно ли в Yii 1.x навесить свой hook именно на проверку прав доступа к действию контролера?

К примеру, у нас есть некий контролер:

class MyController extends Controller
{
    public function filters()
    {
        return array(
            'accessControl', // perform access control for CRUD operations
            'postOnly + delete', // we only allow deletion via POST request
        );
    }

    public function accessRules()
    {
        return array(
            array('allow',
                'roles'=>array('root', 'admin', 'manager'),
            ),
            array('allow', 
                'actions'=>array('send', 'list'),
                'users'=>array('*'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }

так вот мне нужно выполнять свой код, только для запросов, требующих определенных прав доступа (всё действия, кроме: send и list), при этом не реагировать на случаи когда такие права не требуются (действия: send и list) - внимание: выполнять свой код до проверки этих прав доступа к действию.

Возможно ли и как?
  • Вопрос задан
  • 327 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@heahoh
Full stackoverflow developer
Вы можете определить переопределить метод beforeControllerAction, он вызывается до выполнения фильтров
/**
	 * The pre-filter for controller actions.
	 * This method is invoked before the currently requested controller action and all its filters
	 * are executed. You may override this method in the following way:
	 * <pre>
	 * if(parent::beforeControllerAction($controller,$action))
	 * {
	 *     // your code
	 *     return true;
	 * }
	 * else
	 *     return false;
	 * </pre>
	 * @param CController $controller the controller
	 * @param CAction $action the action
	 * @return boolean whether the action should be executed.
	 */
	public function beforeControllerAction($controller,$action)
	{
		if(($parent=$this->getParentModule())===null)
			$parent=Yii::app();
		return $parent->beforeControllerAction($controller,$action);
	}

в $action можете получить action id и произвести необходимые проверки на тип и операции
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы