Имеет ли смысл использовать для этой цели архитектуру sfguard?
Абсолютно, но вам нужно немного ее исправить.По умолчанию Symfony хранит учетные данные в сеансе, что означает, что они не будут признаны недействительными, пока не истечет срок вашего сеанса.Это большая проблема, когда вы ожидаете увидеть немедленный эффект, добавив кого-либо в группу или предоставив ему разрешение.
Чтобы исправить это, вам нужно выполнить одно из следующих действий:
- Загружать учетные данные при каждом запросе, а не при входе в систему.
- При изменении учетных данных пользователя их можно сделать недействительными либо через глобальную настройку кэша в APC (верно, вы используете APC?) Илинастройка в профиле пользователя.
В любом случае вам придется ознакомиться с Symfony и пользовательской системой sfGuardDoctrine.Посмотрите на sfGuardSecurityUser::signIn
, чтобы вы знали, как по умолчанию работают учетные данные.
Как проверить, есть ли у конкретного пользователя специальные полномочия для определенной группы?
Тристан довольно подробно это осветил.Вы также можете захотеть взглянуть на sfDoctrineGuard readme .Обратите внимание, что для любого решения, в котором изменения учетных данных происходят в реальном времени для вошедшего в систему пользователя, вам необходимо переопределить большинство, если не все методы, перечисленные Tristan, для выполнения какого-либо рода аннулирования.
Кроме того, проверьте этот связанный вопрос , это может быть полезно.