2010-11-05 12 views
1

Je veux limiter l'accès aux répertoires en fonction des rôles, par exemple ,:Comment puis-je définir un rôle Admin/Super utilisateur pour avoir un accès complet à l'aide de Spring Security?

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

Mais je veux aussi un rôle de super-utilisateur qui peut accéder à tout, par exemple:

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

est-il un moyen de accomplir cela autre que l'utilisation de hasAnyRole, tout au long? par exemple,

<!-- 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')"/> 

Répondre

0

Cela ressemble à un cas pour RoleHierarchy.

Bien que je ne peux pas trouver un bon moyen de le configurer. Peut-être que cette approche grossière travaillerait:

public class RoleHierarchyInjectionBeanPostProcessor implements BeanPostProcessor {   
    public Object postProcessAfterInitialization(Object bean, String beanName) { 
     if (bean instanceof DefaultWebSecurityExpressionHandler) { 
      ((DefaultWebSecurityExpressionHandler) bean).setRoleHierarchy(...); 
     } 
     return bean; 
    }  
    ... 
} 
0

En this article il y a une solution à un problème similaire. Vous pouvez ignorer la partie à propos de JMX, ce qui compte pour vous est la discussion sur AccessDecisionManager et AccessDecisionVoter. L'idée est d'enregistrer un AccessDecisionVoter personnalisé qui implémente la logique if (superuser) grant access;.