multiple hasrole example authorities spring spring-security rights security-roles

spring - hasrole - definiendo userroles con derechos heredados



spring security set role (2)

Hasta donde yo sé, Spring Security no es compatible con el concepto de Roles y Privilegios. En Spring, las funciones de seguridad solo se denominan a veces Autoridad. Además: en Spring Security son Roles / Autoridades lo que en un Sistema de Roles y Privilegios se llama Privilegios.

Por lo tanto, si desea crear un Sistema de Roles y Privilegios, debe hacerlo usted construyendo su propio Spring Security AuthenticationManager, y pise los Roles de Seguridad de Spring / Authorities como Privileges.

@Ver este blog: Personalización de Spring Security (Parte 1 - Personalización de UserDetails o ampliación de GrantedAuthority) - Está escrito para Spring Security 2.0 y muestra cómo implementar lo que estoy hablando. También indica que RoleHierarchy tiene algunos inconvenientes, pero este artículo es acerca de 2.0, pueden desaparecer los inconvenientes en 3.0

Actualmente estoy investigando el marco de seguridad de la primavera, cosas geniales hasta el momento, bastante impresionado. Sin embargo, no he descubierto dónde ni cómo definir una herencia de permisos.

por ejemplo, quiero que ROLE_ADMIN tenga al menos los mismos derechos que ROLE_USER. Definí tres intercep-urls para la primavera:

<intercept-url pattern="/auth/login.do" access="permitAll"/> <intercept-url pattern="/voting/*" access="hasRole(''ROLE_USER'')"/> <intercept-url pattern="/admin/*" access="hasRole(''ROLE_ADMIN'')"/>

Al intentar acceder a cualquier sitio que anide desde / voting /, al iniciar sesión como usuario de ROLE_ADMIN, se me niega. ¿Me estoy perdiendo de algo? Lo sé, podría definir varios roles para la rama / voting / *, pero si imagino que podría tener 10 roles de usuario diferentes en uno de mis usos de la vida real, puedo imaginarme que el archivo .xml se vuelve realmente desordenado, realmente rápido.

¿Puedo configurar la herencia de roles en algún lugar?

aclamaciones

EDITAR:

Gracias a la gran comunidad y su aporte, se me ocurrió una solución de trabajo, puede ser un buen estilo o no, funciona: D

Definí una enumeración que refleja los roles heredantes de la primavera:

public enum UserRoles { ROLE_USER(new String[]{"ROLE_USER"}), ROLE_ADMIN(new String[]{"ROLE_USER", "ROLE_ADMIN"}); private final String[] roles; private UserRoles(String[] roles) { this.roles = roles; } public String[] getRoles() { return roles; } }

Luego implementé mi propio UserDetailsService:

Dentro del metodo

@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { ... }

en lo que se refiere a agregar autoridades otorgadas a un UserDetail, obtengo el valor enum correspondiente y anexo todos los roles definidos por este valor enum:

List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>(2); for (String role : UserRoles.ROLE_ADMIN.getRoles()) { authList.add(new GrantedAuthorityImpl(role)); } UserDetails user = null; try { //user = new User(username, md5.hashPassword(username), true, true, true, true, authList); } catch (NoSuchAlgorithmException ex) { logger.error(ex.getMessage(), ex); }

Mi objeto de dominio que se conserva, contiene un campo @Enumerated con una UserRole: en un entorno real, este campo se carga desde el DB y las Roles correspondientes se seleccionan de esa enumeración.

gracias de nuevo por la contribución, me encanta esta comunidad ^^