Estoy en el proceso de crear un esquema de base de datos para el siguiente escenario:
- Hay usuarios
- Los usuarios tienen roles (como "Desarrollador" o "CEO")
- Los roles tienen aplicaciones (como "Topdesk")
- Las aplicaciones tienen permisos (como "Actualizar la base de conocimiento")
- Un rol puede tener permisos, si el rol ya tiene acceso a la aplicación
Suponiendo que no exista un entorno de alto rendimiento (sin necesidad de optimizar la velocidad), ¿cuál sería la mejor manera de implementar este esquema? El entorno de la base de datos puede ser MySQL, MSSQL ... se trata más del diseño de la base de datos relacional.
Yo mismo se me ocurrió lo siguiente:
La parte de la que no estoy más seguro es, por supuesto, la tabla Aplicaciones_Permisos_Roles. Es una tabla de enlace encima de otra tabla de enlace. Nunca he usado o visto esto antes. Otra forma de hacerlo sería reemplazarlo con una tabla de vinculación entre Roles y Permisos, y luego usar código o restricciones para garantizar las relaciones requeridas ... pero eso no me parece una buena solución. Estas cosas deben aplicarse en el nivel de la base de datos si es posible (y parece posible), no en el nivel del código.
En segundo lugar, ¿se requiere el enlace entre Permissions.Application y Applications.Id? Lo uso porque puede que no haya filas en Roles_Applications (como cuando acaba de agregar una nueva aplicación) y luego no es posible determinar qué permisos pertenecen a cada aplicación. También es un punto de referencia único para buscar a qué aplicación pertenece un permiso. Supongo que esto es correcto, pero también hace un círculo en el diseño de la base de datos. Errores de MSSQL en él al intentar establecer ON_DELETE u ON_UPDATE en cascada.
¿Alguna sugerencia, o es así como se supone que debe hacerse? Por cierto, cualquier otra sugerencia con respecto a la convención de nomenclatura y similares también es bienvenida (tal vez como comentario)
Gracias
Luc
Editar: título cambiado, con suerte haciéndolo más claro. El anterior fue más completo, pero probablemente demasiado complicado.
Roles_Applications
sea algo real. Dado que todos los permisos son específicos de la aplicación, parece que hay Applications_Permissions
(lo que ha etiquetado Permissions
), que luego pueden asignarse a roles específicos a través de un registro Applications_Permissions_Roles
. Roles_Applications
, de hecho, parece estar describiendo el permiso de aplicación más básico: acceso simple. O bien, está afirmando que un rol tiene cierto nivel de permisos para una aplicación, pero debe buscar en otro lugar para determinar cuáles.