Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 3. Роли пользователей

Использование ролей в Catalyst. Плагин Catalyst::Plugin::Authorization::Roles. Создание таблиц с ролями в БД, установка ограничений доступа в контроллере.

Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 1. Сессии в Catalyst
Создание системы сессий, авторизации и аутентификации в Catalyst. Часть 2. Аутентификация и авторизация

Роли в Catalyst используются для создания пользователей с различными правами доступа. Например, пользователь с правами администратора будет иметь доступ ко всем управляющим элементам сайта, а пользователь manager - только к разделу по генерации отчетности.

После работы, выполненной на предыдущем шаге, добавить использование ролей будет совсем просто.

1. Создаем в БД таблицу ролей и таблицу для установления связи между пользователем и назначенной ролью.

Каждому пользователю может быть назначено несколько ролей. Т.е. пользователь может одновременно получить роли "Менеджера" и "Бухгалтера" - и иметь доступ к соответствующим разделам. Каждая новая роль расширяет полномочия одного клиента.

2. Создаем несколько ролей и устанавливаем связь между ролью и пользователем.

3. Устанавливаем дополнительный плагин для Catalyst.

4. Создаем новый контроллер для демонстрации работы с ролями.

5. Указываем новый плагин Authorization::Roles в файле lib/app.pm:

6. Определяем права доступа к некому участку кода.

lib/app/Controller/Admin.pm :

 

Методы Catalyst::Plugin::Authorization::Roles

assert_user_roles [ $user ], @roles

Проверка пользователя на принадлежность к некому списку ролей. Если проверка не удалась (пользователь $c->user не определен, пользователю не назначены указанные роли), будет возвращена ошибка. Организовать перехват ошибки можно с помощью eval. Если первый аргумент не указан, по умолчанию будет использовано значение $c->user.

check_user_roles [ $user ], @roles

Принимает те же аргументы, что и assert_user_roles, выполняет те же проверки, но вместо ошибки возвращает true или false.

assert_any_user_role [ $user ], @roles

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

check_any_user_role [ $user ], @roles

Возвращает true или false, в зависимости от результатов проверки - задана ли для пользователя хотя бы одна из указанных ролей.

7. Проверяем работоспособность кода.

Запускаем сервер, пробуем зайти на страницу http://localhost:3000/admin/ и получить сообщение "Welcome!". Это получится только после авторизации под пользователем admin.

 

Полезные ссылки по теме ролей Catalyst

search.cpan.org: Catalyst::Manual::Tutorial::06_Authorization

search.cpan.org: Catalyst::Authentication::Store::DBI::ButMaintained

search.cpan.org: Catalyst::Plugin::Authorization::Roles