Yii framework - как указать одинаковые правила доступа для всех контроллеров модуля? - PullRequest
2 голосов
/ 23 октября 2009

Я создал модуль для конкретных операций администратора. Я не хочу писать одинаковые правила доступа для каждого контроллера, это не совсем стиль кодирования.

Ответы [ 4 ]

3 голосов
/ 23 октября 2009

Модуль похож на подпрограмму с отдельной структурой каталогов. Он не несет ответственности за фильтрацию или проверку на разрешение.

Единственное жизненно важное решение - определить новую абстракцию, предложенную Исмаилом.

class ExtendedController
{
    public function rules()
    {
        return array_merge(parent::rules(), array(
           // your rules
        ));
    }
}
3 голосов
/ 23 октября 2009

Одним из решений будет расширение общего контроллера BaseClass для каждого аутентифицируемого класса.

Таким образом, вы можете написать один раз.

1 голос
/ 18 ноября 2009

Варианты Ismael и pestaa очень хороши, даже быстро реализуются, тем не менее, я всегда рекомендую более мощные альтернативы, такие как модель RBAC. Вы можете найти очень хороший графический интерфейс для Yii RBAC в http://code.google.com/p/srbac/

0 голосов
/ 29 апреля 2014

Это сработало для меня:

class extendedController extends baseController
{
    public function accessRules()
    {
        return array_merge(

            // This controller's rules are added first:
            // Allow all users to call the 'hello' action.
            array(
                array('allow',
                    'actions'=>array('hello'), 
                    'users'=>array('*'),
                ),
            ),

            // BaseController rules are added last, especially
            // if the last rule in the baseController denies all
            // users that were not allowed yet.
            parent::accessRules()
        );
    }

    public function actionHello()
    {
        echo('Hello!');
    }
}
...