Estamos desarrollando una aplicación (utilizando Grails Spring Security (anteriormente Acegi)) en la que tendremos miles de usuarios que abarcan de 10 a 15 tipos de usuarios discretos. En el sistema actual, cada tipo de usuario equivale a un "grupo", y los roles y permisos específicos están vinculados al grupo. El usuario obtiene todos sus "roles" del grupo.Spring Security (Acegi) y grupos de usuarios (frente a Roles)
Por ejemplo, podríamos tener dos grupos de usuarios:
PAYASO: papeles = ride_clown_car, toot_horn, receive_applause ACRÓBATA: papeles = do_flip, walk_tightrope, receive_applause
Tenemos tres usuarios, asignado a la Grupo CLOWN, uno asignado al grupo ACROBAT y otro asignado a ambos (tiene una unión de roles CLOWN y ACROBAT).
Si cambiamos los permisos, lo hacemos a nivel de grupo. Por ejemplo, si agregamos un permiso swing_on_trapeze al grupo ACROBAT, todos los acróbatas lo heredarán automáticamente.
En términos de Grails, los permisos en los controladores seguirían estando en el nivel de rol. Entonces, una acción con @Secured (['toot_horn']) permitiría a los usuarios del grupo CLOWN pero no del grupo ACROBAT. @Secured (['receive_applause']) permitiría tanto CLOWNS como ACROBATS.
¿Cómo haré esto en Spring Security dada la naturaleza de dos niveles del modelo (usuario, rol)? ¿Debo implementar mi propia autenticación personalizada para recopilar roles basados en grupos?
Gracias!
Me estoy poniendo en práctica algo muy similar al tuyo ¿Cómo configura "grails.plugin.springsecurity.userLookup.authorityJoinClassName" en su caso? En un sistema de dos niveles, esto solo podría apuntar al primer nivel (grupo de usuarios) que no define los roles/autoridades reales. – sola