SonataAdminBundle. Как лучше проверять роль пользователя при определенном действии?
Задача следующая.
Имеется раздел новостей, где есть модераторы и администраторы. Модераторы могут добавлять новости, но не могут их опубликовывать. Администраторы, разумеется, это делать могут.
Самое интересное - это то, что это всего лишь галочка в форме добавления/редактирования. Получается, что нужно показывать/прятать эту галку, когда у пользователя есть/нет роли "публикования".
Получается встает вопрос: каким путем пойти, чтобы добавить проверку на роль "публикования"?.
Как извращение, то можно создать слушателя, который будет перехватывать prePersist/preUpdate и проверять имеется ли галка "опубликовать" и смотреть роль пользователя.
если вы делаете это через формы, то можно проверить роль и не добавлять это поле если эта проверка не прошла
вот кусок кода для вдохновения (только security.context нужно будет передавать в форму если они у вас в отдельном файле): symfony.com/doc/current/book/security.html#securin...
Благодарю за скорый ответ. Вот вы говорите, что правильный способ - второый, который вы написали. Так в форме мне все равно же придется прятать кнопку, иначе она бесполезна для модераторов. Поэтому, почему вы настаиваете на втором способе?
SweetLemonade: отличие только в том что проверяем, в первом случае мы проверяем роль пользователя, во втором может ли пользователь публиковать эту новость, то есть второй способ семантически более верен (так будет проще когда у вас появится больше чем 2 роли)
neolink: понял. Теперь другой вопрос, если конечно вам не трудно. В констукторе форм от SonataAdminBundle нет доступа к объекту "security.context", могу ли я переопределить их констуктор и в сервисе передать этот "security.context"?
SweetLemonade: конечно можете), вообще не работал с SonataAdminBundle, но гугл говорит что самое простое это прямо в вашем Admin классе взять этот сервис так: