Innanzitutto, che tipo di modello di sicurezza prevedi di implementare? Controllo degli accessi in base al ruolo (RBAC) o Controllo dell'accesso discrezionale (DAC)?
RBAC nel modello RBAC (Role-Based Access Control), l'accesso alle risorse si basa sul ruolo assegnato a un utente. In questo modello, un amministratore assegna un utente a un ruolo che ha determinati diritti e privilegi predeterminati. A causa dell'associazione dell'utente al ruolo, l'utente può accedere a determinate risorse ed eseguire attività specifiche. RBAC è anche noto come controllo di accesso non discrezionale. I ruoli assegnati agli utenti sono amministrati centralmente.
DAC Nel modello Discretionary Access Control (DAC), l'accesso alle risorse si basa sull'identità dell'utente. A un utente vengono concesse le autorizzazioni per una risorsa essendo collocato in un elenco di controllo di accesso (ACL) associato alla risorsa. Una voce nell'ACL di una risorsa è nota come voce di controllo di accesso (ACE). Quando un utente (o gruppo) è il proprietario di un oggetto nel modello DAC, l'utente può concedere l'autorizzazione ad altri utenti e gruppi. Il modello DAC si basa sulla proprietà delle risorse.
vedi fonte
1) In RBAC: è necessario disporre della tabella ElementType per assegnare i diritti al ruolo (gli utenti sono assegnati ai ruoli). RBAC definisce: "Cosa può fare questo ruolo / utente". L'amministratore assegna i diritti per i ruoli e le autorizzazioni ai ruoli, assegna gli utenti ai ruoli per accedere alle risorse. 2) Nel DAC: utenti e ruoli hanno diritti sugli elementi tramite l'elenco di controllo degli accessi (proprietà). Il DAC definisce: "chi ha accesso ai miei dati". L'utente (proprietario) concede le autorizzazioni alla risorsa posseduta.
Ad ogni modo suggerisco questo modello di dati:
CREATE TABLE ElementType
(
Id (PK)
Name
...
)
CREATE TABLE ElementBase
(
Id (PK)
Type (FK to ElementType)
...
)
(relazione uno a uno)
CREATE TABLE Element_A
(
Id (PK, FK to ElementBase)
...
)
CREATE TABLE Element_B
(
Id (PK, FK to ElementBase)
...
)
1) RBAC (relazione molti-a molti)
CREATE TABLE ElementType_To_Role_Rights
(
RightId (PK)
RoleId (FK to Role)
ElementTypeId (FK to ElementType)
...
)
2) DAC (rapporto molti-a-molti)
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)
...
)