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.