Плагин Spring Security ACL для Grails по умолчанию использует класс BasePermission с 4 основными разрешениями. И использует DefaultFactory для назначения этих разрешений. И AclPermissionEvaluator, где назначен этот DefaultFactory.
При использовании этого подхода все в порядке. Я могу использовать
@PreAuthorize("hasPermission(#report, read)")
Здесь я предоставил одно из основных разрешений, называемое READ, которое определено в классе BasePermission.
Мне нужны мои собственные права доступа.
Я сделал:
public class MyPermission extends AbstractPermission{
public static final Permission APPROVE= new MyPermission(1 << 0, 'a');
//constructors here..
}
1) Как правильно назначить мое пользовательское разрешение на его использование, как я использовал разрешения от BasePermission?
2) Должен ли я определить свой CustomFactory или можно ли использовать DefaultFactory?
3) Если да, как установить его для существующего оценщика разрешений?
Также еще один открытый вопрос. Я играл с подклассом BasePermission, но в этом случае я должен использовать
@PreAuthorize("hasPermission(#report, 'approve')")
вместо
@PreAuthorize("hasPermission(#report, approve)")
4) Почему в случае отсутствия одинарных кавычек я получил ошибку?
Class:org.springframework.expression.spel.SpelEvaluationException
Message:EL1008E:(pos 28): Field or property 'approve' cannot be found on object of type 'org.springframework.security.access.expression.method.MethodSecurityExpressionRoot'
Заранее спасибо!