Deadbolt 2: полный контроль над ограничениями с помощью настроек БД
ellou"
Я хочу или, скорее, нужно контролировать ограничения для некоторых действий и контроллеров через настройки базы данных, какой лучший способ сделать такую работу?
Какова моя цель: мне нужно создать решение, в котором будет много групп пользователей (хранящихся в БД), и они будут полностью динамическими (создаются и удаляются из панели администратора). Разрешения должны быть унаследованы для подгрупп, поэтому, если у пользователя есть роль EditorsChief
он также может выполнять действия, разрешенные для всех Editor
, Я не могу просто комментировать действие / контроллер с @Restrict({"EditorsChief", "Editor"})
потому что они не существуют (должны быть созданы на лету с панели администратора).
Мои первые мысли должны использовать @Dynamic
Контроллер и группировка ограничений с отдельными обработчиками, которые, конечно, требуют жесткого кодирования некоторых из них. Это не так уж и плохо - при некотором внимании можно установить неплохую схему (т. Е. Путем именования обработчиков с условным обозначением: handlerControllerAction
, handlerControllerOtherAction
...
О чем ты думаешь? Я иду в хорошем направлении?
1 ответ
Лучший способ сделать это - использовать динамическую аннотацию и дать каждому отдельное имя, описывающее функцию метода. Поскольку в вашем коде имеется ограниченное число аннотированных методов, вы можете сохранить эти имена в базе данных (возможно, кешируя их, как указано выше, для повышения производительности).
В административной панели вы можете затем связать эти имена с группами, ролями или чем-либо еще и выполнить управление на основе этого. Это было бы, вне моей головы, отношения один-ко-многим в БД.
Дайте мне знать, если мне нужно объяснить это более полно.
Стив (автор Deadbolt)