Estoy diseñando un modelo de seguridad para una aplicación web que restringe el acceso a ciertas partes de la aplicación en función de los derechos y permisos que tenga el usuario. Estos derechos y permisos se agrupan en roles que cada usuario puede asignar.
Sin embargo, necesito crear una función de administrador del sistema que le dé a un usuario especial acceso completo a todo. Para abordar esto puedo hacerlo de dos maneras:
- Crea un rol de administrador del sistema y dale a cada uno permiso / derecho en el sistema (básicamente todos los derechos están almacenados en una tabla DB). A medida que la aplicación evoluciona y se hace más grande, el La función de administrador también debe actualizarse para que tenga acceso a la cosas nuevas.
- Dentro de la aplicación en sí, permito el sistema Rol de administrador para eludir las restricciones de seguridad. Tan esencialmente comprobará si el usuario tiene un cierto permiso, o si son un Administrador del sistema, los dejará pasar.
La opción 1 presenta algunos problemas: podría ser tediosa y propensa a la supervisión porque cada área de la aplicación tiene Crear, Leer, Actualizar, Escribir y muchos más permisos. Tengo que incluir todas las combinaciones posibles de área de aplicación a permisos en una tabla para que el rol tenga acceso completo.
La opción 2 presenta sus propios problemas: la omisión del administrador del sistema está codificada en todas las áreas donde se necesita una restricción. Si el nombre de la función de administrador del sistema fuera a cambiar (por ejemplo, Usuario maestro), entonces tendría que actualizar el código en todas partes. Sin embargo, esta opción significa que no tengo que preocuparme por actualizar constantemente la tabla de roles para que el administrador del sistema obtenga permiso para acceder a nuevas cosas.
Estoy creando un software de clase empresarial, por lo que tiene que ser escalable con la opción que elija.
Sí, sé que esto es altamente subjetivo si se lo trata tal como está. Pero creo que debe haber algún patrón de diseño de seguridad de buenas prácticas en el que se recomiende una manera sobre la otra. Hay cosas que no puedo prever ahora que otros pueden haber encontrado. Incluso agradecería algunos enlaces a pensamientos sobre esto y una buena manera de avanzar.