Mysql
 sql >> Database >  >> RDS >> Mysql

Schema database per RBAC con più livelli di ruoli

La mia esperienza durante la sperimentazione con un'implementazione RBAC personalizzata è la seguente:

  1. Leggi molta della letteratura RBAC e pensi di capirla. Quindi vai avanti e provi a implementarlo, solo per renderti conto che non l'hai capito affatto. Alla fine avrà senso man mano che avanzi nel progetto.

  2. In base alla tua domanda, conosci già il dominio aziendale a cui desideri applicare l'RBAC. Ma per ora dimentica gli oggetti aziendali reali. La tua implementazione RBAC dovrebbe essere generica, il che significa che hai uno schema DB composto da tabelle Ruolo, Utente, Autorizzazione, Operazione, ecc. Quindi avrai oggetti che mappano a tali tabelle (relazione uno-a-uno).

Una volta che hai questa implementazione RBAC, può quindi essere modellata praticamente su qualsiasi dominio aziendale, come un "Dipartimento" che hai menzionato.

Ricorda solo che non è tutto perfetto... Ho migliorato/modificato/derivato dall'attuale letteratura RBAC per aggiungere funzionalità personalizzate, migliorare le prestazioni, ecc.

Non ci lavoro da un po', quindi spero di avere ragione su quanto segue:

  • Utente:le istanze vengono create e salvate nella relativa tabella di supporto.
  • Ruolo:le istanze vengono create e salvate nella relativa tabella di supporto. I ruoli verranno assegnati agli utenti.

  • Autorizzazione:un'autorizzazione è fondamentalmente una combinazione di un'operazione su un oggetto. Le autorizzazioni vengono assegnate ai ruoli.

  • Operazione:un'operazione è semplicemente qualsiasi cosa tu voglia. Potrebbe essere CRUD (crea, leggi, aggiorna, elimina) o potrebbe anche essere "stampa", "ricerca" o qualsiasi cosa un essere umano (o un sistema) può eseguire su un oggetto (o gruppo di oggetti).

  • Oggetto:sono praticamente tutti i tuoi oggetti che compongono il tuo dominio aziendale.

Per una potenza ancora maggiore, potresti implementare vincoli per applicare un'enorme quantità di varie restrizioni.

Con questo framework dovresti essere in grado di mappare:

  • Chi può assegnare utenti a un dipartimento
  • Chi può rimuoverli dai reparti
  • Quanti utenti possono essere in un reparto
  • Che tipo di utenti (in base ai ruoli assegnati) possono trovarsi in un dipartimento
  • Quali rotoli possono eseguire quali operazioni in un reparto (crearli, leggerli, aggiornarli, eliminarli)
  • Ecc.