Мне интересно, знает ли кто-нибудь об элегантном способе достижения этого, используя систему ACL Symfony2.
У меня есть объект Comment (мой объект домена), который должен быть доступен для редактирования ROLE_USER, но это разрешено только в течение 5 минут после публикации комментария, иначе комментарий может быть отредактирован только ROLE_ADMIN.
Сделать это так, чтобы его можно редактировать только с помощью ROLE_USER и ROLE_ADMIN просто, просто сделайте RoleSecurityIdentity для каждого.
Теперь моя проблема возникает, когда я хочу включить фактор времени для ROLE_USER. Моя первая проблема заключается в том, что ему нужна информация от объекта домена, а не только таблицы ACL, но я думаю, что это разрешимо, создав собственный ObjectIdentity класс, который также может содержать время, в течение которого был отправлен Comment.
Теперь для жесткой части
Мне кажется, мне нужно создать пользовательский PermissionGrantingStrategy, который знает, как посмотреть время создания. Это нужно загружать, когда проверяется тип Comment, но я не знаю, как его загрузить. Кто-нибудь знает, есть ли какой-то factory, через который можно настроить такую вещь? Итак, если объект имеет конкретный PermissionGrantingStrategy, связанный с ним, тогда он используется, иначе используется значение по умолчанию?
Я знаю, что это немного длинный, большое спасибо, если кто-то знает, как этого добиться, поскольку документация ACL кажется немного редкой на данный момент. Мое резервное решение состоит в том, чтобы просто сделать какой-то сервис, чтобы проверить, можно ли редактировать комментарий и не беспокоить ACL вообще.