En primer lugar, ¿qué tipo de modelo de seguridad planea implementar? ¿Control de acceso basado en roles (RBAC) o control de acceso discrecional (DAC)?
RBAC en el modelo de Control de acceso basado en roles (RBAC), el acceso a los recursos se basa en el rol asignado a un usuario. En este modelo, un administrador asigna un usuario a un rol que tiene ciertos derechos y privilegios predeterminados. Debido a la asociación del usuario con el rol, el usuario puede acceder a ciertos recursos y realizar tareas específicas. RBAC también se conoce como control de acceso no discrecional. Los roles asignados a los usuarios se administran centralmente.
DAC En el modelo de control de acceso discrecional (DAC), el acceso a los recursos se basa en la identidad del usuario. Un usuario recibe permisos sobre un recurso al ser colocado en una lista de control de acceso (ACL) asociada con el recurso. Una entrada en la ACL de un recurso se conoce como Entrada de control de acceso (ACE). Cuando un usuario (o grupo) es el propietario de un objeto en el modelo DAC, el usuario puede otorgar permiso a otros usuarios y grupos. El modelo DAC se basa en la propiedad de los recursos.
ver fuente
1) En RBAC: necesita la tabla ElementType para asignar derechos a roles (los usuarios se asignan a roles). RBAC define: "¿Qué puede hacer este rol / usuario"? El administrador asigna derechos para roles y permisos a roles, asigna usuarios a roles para acceder a los recursos. 2) En DAC: los usuarios y los roles tienen derechos sobre los elementos a través de la lista de control de acceso (propiedad). DAC define: "quién tiene acceso a mis datos". El usuario (propietario) otorga permisos al recurso propio.
De cualquier manera sugiero este modelo de datos:
CREATE TABLE ElementType
(
Id (PK)
Name
...
)
CREATE TABLE ElementBase
(
Id (PK)
Type (FK to ElementType)
...
)
(relación uno a uno)
CREATE TABLE Element_A
(
Id (PK, FK to ElementBase)
...
)
CREATE TABLE Element_B
(
Id (PK, FK to ElementBase)
...
)
1) RBAC (relación de muchos a muchos)
CREATE TABLE ElementType_To_Role_Rights
(
RightId (PK)
RoleId (FK to Role)
ElementTypeId (FK to ElementType)
...
)
2) DAC (relación de muchos a muchos)
CREATE TABLE ElementBase_To_Actor_Rights
(
RightId (PK)
ElementBaseId (FK to ElementBase)
ActorId (FK to Actor)
...
)
CREATE TABLE Actor
(
Id (PK)
Name
)
CREATE TABLE User
(
Id (PK, FK to Actor)
Password
...
)
CREATE TABLE Role
(
Id (PK, FK to Actor)
...
)