Estoy tratando de seguir el modelo de control de acceso de bases de roles para restringir lo que los usuarios pueden o no pueden hacer en mi sistema.
Hasta ahora tengo las siguientes entidades:
Usuarios : personas que utilizarán el sistema. Aquí tengo nombres de usuario y contraseñas. roles : colección de roles que los usuarios pueden tener. Cosas como recursos de administrador, administrador, etc. - Cosas que los usuarios pueden manipular. Operaciones como contratos, usuarios, borradores de contratos, etc. - Cosas que los usuarios pueden hacer con los recursos. Como crear, leer, actualizar o eliminar.
Ahora, mi duda surge aquí en el diagrama donde tengo una relación como esta:
Las operaciones (0 .. *) se ejecutan sobre los recursos (0 .. *) que genera una tabla que llamé permisos y que almacenará la operación y el recurso .
La tabla de permisos se verá así (una fila): ID: 1, operación: crear, recurso: contrato.
Lo que significa un permiso para crear un contrato .
Lo hice así porque siento que algunos recursos pueden no tener todo tipo de operaciones. Por ejemplo, para registrar contratos , los usuarios pueden cargar archivos , pero esta operación no está disponible para registrar un proveedor .
Entonces, cuando el administrador otorgue permisos a un rol , no tendrá una lista de recursos con cada operación registrada en el sistema.
Creo que cada recurso tiene su propia colección de operaciones que se pueden ejecutar sobre él.
Puedo aclarar si algo no es comprensible.
¿Es esta la forma correcta de implementar el rbac?
EDITAR
Lo que quiero decir es que al tener una tabla de permisos que tiene operación y recursos , tengo DOS tablas adicionales porque quiero asociar recursos con operaciones . También podría haber hecho que los recursos tengan permisos donde la tabla de permisos almacenaría los permisos.
Pero lo que habría sucedido es que algunos permisos que ni siquiera existen para algunos recursos habrían aparecido cuando el administrador los estaría asignando.
Entonces, quiero saber desde el punto de vista del diseño de la base de datos si este permiso de tabla que tiene una operación de columna y otro recurso es correcto. ¿Tendré problemas si sigue así?