Yii framework - как указать одинаковые правила доступа для всех контроллеров модуля?

StackOverflow https://stackoverflow.com/questions/1612472

  •  06-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

class ExtendedController
{
    public function rules()
    {
        return array_merge(parent::rules(), array(
           // your rules
        ));
    }
}

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

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

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!');
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top