Настраиваем доступ к web приложению на основе ролей Yii 2. Часть 4. Наследование ролей

В этой статье мы завершаем рассмотрение RBAC в Yii 2 и посвятим её последней из его ключевых особенностей – наследованию ролей.

Наследование ролей во многом схоже с обычным наследованием классов. Роль наследник обладаем всеми свойствами (права, запреты) роли предка и добавляет к ним собственные.

Данная возможность особенно полезна в случаях когда в приложении имеется ряд ролей, которые в основном идентичны и различаются лишь незначительно за счёт некоторого сравнительно небольшого количества прав и разрешений.

Например. Есть три роли «Менеджер проекта 1», «Менеджер проекта 2», «Менеджер проекта 3». Каждая из них обладает всеми правами менеджера проекта, но с поправкой, что каждый менеджер видит только свой проект.

Выполнять каждый раз полное конфигурирование каждой подобной роли объёмная и рутинная работа. Гораздо проще и эффективнее создать базовую роль «Менеджер проекта» с общими правами для всех менеджеров проектов и уже от неё создавать наследников для конкретных проектов добавляя права на работу с этими проектами уже им.

Принцип создания такой системы ролей предельно прост. Нужно создать обе роли и назначить одну наследником другой при помощи метода addChild, как это показано в примере ниже.

Назначение прав ролям уже рассматривалось нами ранее и поэтом в примере оно опущено.

Таким образом, используя наследование можно очень гибко управлять правами доступа к приложению.

Стоит добавить, что наследование поддерживается не только для ролей, но и разрешений (реализуется аналогично). При чём разрешается не только наследовать роль от роли и разрешение от разрешения. Также допускается наследовать роль от разрешения и разрешение от роли.

Глубина наследования не ограничена.

Всё это позволяет при желании создавать гибкие и сложные механизмы управления доступом. Главное в процессе их разработки и эксплуатации самому в них не запутаться.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *