Cuando un servicio comprueba la autorización de un usuario para ejecutar una acción utilizando roles suelo encontrarme con la siguiente implementación:
Public Enum Rol ConsultorModulo1 ConsultorModulo2 OperadorModulo1 OperadorModulo2 Administrador End Enum function DoAction() { Rol allowedRoles[] = [OperadorModulo1, Administrador]; if (user.hasAnyRoleIn(allowedRoles)) { DoAction(); } else { throw new SecurityException("Permisos insuficientes"); } }
- ConsultorModuloX es un rol que permite consultar información pero no modificarla para un módulo del sistema en concreto.
- OperadorModuloX es un rol que permite la modificación de información para un módulo del sistema en concreto.
- Administrador es un rol que permite la totalidad de las acciones en el sistema.
No me gusta porque tenemos que encontrar coincidencias de items entre 2 conjuntos (roles que tiene el usuario y roles permitidos para la acción pertinente). Quedaría más eficiente y bonito si encontramos la manera de poder combinar varios roles en una sola variable y comprobar rápidamente si el usuario tiene asignado alguno (o varios o todos) de los roles necesarios.