Я хочу использовать безопасность Spring для управления пользователем, группой и полномочиями.
Я хочу использовать ACL для обеспечения моих объектов области, но я не могу найти способ присвоить группу acl.
Например: у меня есть пользователи и группы. У каждой группы могут быть следующие ценные бумаги: - справляются, форумы (может быть роль как ROLE_FORUM_MANAGER
) - редактируют определенный форум (acl на определенном форуме).
Кроме того, Группы определяются пользователями, которые имеют роль ROLE_PERMISSION_MANAGER
. НО все группы, определенные этим пользователем, могут только редактироваться и управляться этим пользователем. Так группа присоединены к пользователю. Точно, предположите, что пользователь создает группу Google: этот пользователь может управлять правильными группами разрешения только для группы, которую он создал. И таким образом, он может создать группу для управления определенным форумом ее собственной группы Google.
Как я могу сделать это?
Я прочитал пружинные документы безопасности и следующие учебные руководства (поэтому не отправляйте меня в эти ссылки): http://grzegorzborkowski.blogspot.com/2008/10/spring-security-acl-very-basic-tutorial.html http://blog.denksoft.com/?page_id=20
Вы объявили анонимную функцию с помощью
function(){
. Вы должны объявить ее как
function testfunc(){
, чтобы напечатать имя.
public class ForumPermissionEvaluator implements PermissionEvaluator {
public boolean hasPermission(Authentication authentication,
Object domainObject, Object permission) {
//implement
}
public boolean hasPermission(Authentication authentication,
Serializable targetId, String targetType, Object permission) {
//implement
}
}
Наконец, соедините это вместе в конфигурации приложения:
<beans:bean id="expressionHandler"
class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
<beans:property name="permissionEvaluator" ref="permissionEvaluator"/>
</beans:bean>
<beans:bean id="permissionEvaluator"
class="com.centrix.core.security.GroupPermissionEvaluator" />
Я бы просто использовал ваш Группы любят роли. Я обнаружил, что реализация Spring ACL довольно громоздка и по большей части непригодна для использования. Просто распределите пользователей по «группам» (фактически роли) и проверьте их, как при обычной авторизации на основе ролей.
Я сделал кое-что подобное 'вручную': т.е. у меня был свой код, чтобы определить, какие экземпляры могут быть отредактированы/удалены определенным пользователем, и я полагался только на Spring security, чтобы убедиться, что у них есть правильная роль для доступа к функциональности и для предоставления информации о роли/аутентификации для текущего пользователя.
Таким образом, в своем коде я определил текущий принцип (наш собственный класс User) и на основании этого я решил, какими правами обладает этот пользователь на конкретном экземпляре.
public static User getCurrentUser() {
User user = null;
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null) {
Object principal = auth.getPrincipal();
if (principal instanceof User) {
user = (User)principal;
}
}
return user;
}