mcmraak
@mcmraak
php+sql+js+bicycle+crutches

Хранить ли разрешения в сессии?

Подскажите пожалуйста (и простите если непонятно написал), к примеру есть CRM у которой разрешения хранятся следующим образом: Есть таблица с группами пользователей, каждая группа хранит набор экшенов (пара контроллер@метод). Групп много, потому что пользователи сами могут создавать группы с разными наборами разрешений. Плюс ко всему система разделена на зоны доступа (с вложенными зонами и т.д.) на данный момент набор правил загружается в сессию пользователя в момент аутентификации, причём для того что-бы этот набор правил сформировался, необходимо выполнить довольно длинный запрос с финтами (правила глобальной группы, запреты локальной группы, идентификаторы зоны доступа и т.д.). Вот собственно вопрос: Вот это вообще правильно, получать разрешения один раз и хранить в сессии или надо каждый раз проверять из БД?

Хочется услышать профи, которые на практике столкнулись с подобной задачей, ведь в случае с сессией страдает безопасность (и размер дискового), а в случае с БД страдает БД, ведь при каждом запросе проверять придётся, и тут либо пилить безопасность сессий, либо оптимизировать запросы, либо какой-то другой путь.
  • Вопрос задан
  • 121 просмотр
Решения вопроса 2
Urvin
@Urvin
NoSQL c хранением данных в RAM
Ответ написан
Комментировать
Akdmeh
@Akdmeh
PHP, Yii2, Music
Не надо для этого использовать сессии.
Начните с того, что создайте отдельные модели, которые и будут предоставлять интерфейс получения разрешений для конкретного пользователя, например, что-то типа:
securityManager->can('deletePosts')
И уже потом, если заметите, что база данных узкое место - можно будет внутри этих методов подключить более эффективное кеширование, хоть Redis, хоть Memcache.
Сессии однозначно для этого вам не будут нужны.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы