Я использую Катализатор с Catalyst::Plugin::Authentication
и
Catalyst::Plugin::Authorization::Roles
и мне интересно, есть ли лучшее
подход к добавлению атрибута к модели, которого я не вижу.
Каждому пользователю разрешен доступ к одной или нескольким компаниям, но есть
всегда одна основная (текущая) компания за раз. Разрешенный список
хранится в базе данных, и доступ к базе данных в основном осуществляется через DBIC
.
Мое первое желание - сказать, что у пользователя есть текущий
компания, и, следовательно, положить его как часть модели пользователя: дать пользователю
пакет "sub company { … }
", чтобы получить / установить текущую компанию пользователя.
проверка базы данных довольно проста; просто используйте "$self->search_related
" (DBIC
метод, унаследованный пользовательской моделью).
Проблемы, с которыми я сталкиваюсь:
- Текущая компания должна сохраняться между запросами, но я бы предпочел
не хранить его в базе данных (он должен сохраняться только для этого
сессия). Естественное место - сессия…
- Существует роль, похожая на
root
Unix, которая позволяет вам действовать как
любая компания, игнорируя список в базе данных. Проверка этой роли
может быть сделано через базу данных, но везде в приложении используется
$c->assert_user_role
и друзья.
Я слышал, что лучше всего сохранять модели как независимые от Catalyst, так как
возможный. Также довольно странно иметь модель манипулирования
$c->session
.
Конечно, я мог бы перенести эти проверки на контроллеры и получить
модель принимает все, что отправляет контроллер, но это нарушает СУХОЙ
довольно сильно, и просто умоляю о проблеме безопасности, если я забуду один из
чеки где-то.
Есть предложения? Или мне просто пожать плечами и пойти дальше и сделать это в модели?
Спасибо, и извиняюсь за название, я не смог придумать хороший.