Как мне установить роль администратора / суперпользователя, чтобы иметь полный доступ с помощью Spring Security? - PullRequest
1 голос
/ 05 ноября 2010

Я хочу ограничить доступ к каталогам на основе ролей, например:

<intercept-url pattern="/foo/**" access="hasRole('ROLE_FOO')"/>
<intercept-url pattern="/bar/**" access="hasRole('ROLE_BAR')"/>

Но я также хочу роль суперпользователя, которая может получить доступ ко всему, например:

<intercept-url pattern="/**" access="hasRole('ROLE_SUPERUSER')"/>

Есть ли способ сделать это, кроме использования hasAnyRole? например,

<!-- This seems ugly, with all the repeated references. OTOH, it's explicit -->
<intercept-url pattern="/foo/**" access="hasAnyRole('ROLE_FOO', 'ROLE_SUPERUSER')"/>
<intercept-url pattern="/bar/**" access="hasRole('ROLE_BAR') or hasRole('ROLE_SUPERUSER')"/>

Ответы [ 2 ]

0 голосов
/ 07 ноября 2010

В этой статье есть решение аналогичной проблемы. Вы можете игнорировать часть о JMX, для вас важен разговор о AccessDecisionManager и AccessDecisionVoter. Идея состоит в том, чтобы зарегистрировать пользовательский AccessDecisionVoter, который реализует логику if (superuser) grant access;.

0 голосов
/ 06 ноября 2010

Это похоже на случай RoleHierarchy.

Хотя я не могу найти хороший способ его настройки.Возможно, этот грубый подход сработает:

public class RoleHierarchyInjectionBeanPostProcessor implements BeanPostProcessor {        
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        if (bean instanceof DefaultWebSecurityExpressionHandler) {
            ((DefaultWebSecurityExpressionHandler) bean).setRoleHierarchy(...);
        }
        return bean;
    }     
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...