sql >> Databáze >  >> RDS >> Mysql

Schéma DB pro RBAC s více úrovněmi rolí

Moje zkušenost s experimentováním s vlastní implementací RBAC je následující:

  1. Četli jste hodně literatury RBAC a myslíte si, že jí rozumíte. Pak půjdete do toho a pokusíte se to implementovat, jen abyste si uvědomili, že jste tomu ve skutečnosti vůbec nerozuměli. Nakonec to bude dávat smysl, když se budete v projektu pohybovat.

  2. Na základě vaší otázky již znáte obchodní doménu, na kterou chcete RBAC aplikovat. Ale zapomeňte na skutečné obchodní předměty. Vaše implementace RBAC by měla být obecná, což znamená, že máte schéma databáze skládající se z tabulek Role, Uživatel, Oprávnění, Operace atd. Potom budete mít objekty, které se na takové tabulky mapují (relace jedna ku jedné).

Jakmile budete mít tuto implementaci RBAC, lze ji modelovat prakticky pro jakoukoli obchodní doménu, jako je například „oddělení“, které jste zmínili.

Jen si pamatujte, že to není všechno dokonalé... Vylepšil jsem/upravil/odvozil jsem ze skutečné literatury RBAC, abych přidal vlastní funkce, zlepšil výkon atd.

Nějakou dobu jsem na tom nepracoval, takže doufám, že v následujícím mám pravdu:

  • Uživatel:Instance se vytvářejí a ukládají do podpůrné tabulky.
  • Role:Instance se vytvářejí a ukládají do podpůrné tabulky. Role budou přiřazeny uživatelům.

  • Oprávnění:Oprávnění je v podstatě kombinací operace na objektu. Rolím se přidělují oprávnění.

  • Operace:Operace je prostě cokoliv, co chcete. Může to být CRUD (create, read, update, delete) nebo to může být také 'print', 'search' nebo cokoli, co člověk (nebo systém) může provést na objektu (nebo skupině objektů).

  • Objekt:Toto jsou v podstatě všechny vaše objekty, které tvoří vaši obchodní doménu.

Pro ještě větší výkon byste mohli implementovat omezení pro použití obrovského množství různých omezení.

S tímto rámcem byste měli být schopni mapovat:

  • Kdo může přiřadit uživatele k oddělení
  • Kdo je může odebrat z oddělení
  • Kolik uživatelů může být v oddělení
  • Jaký druh uživatelů (na základě jejich přiřazených rolí) může být v oddělení
  • Které role mohou provádět jaké operace s oddělením (vytvářet, číst, aktualizovat, mazat)
  • Atd.


  1. DATE_FORMAT v postgresql

  2. Jak můžete pojmenovat tabulky datové sady, které vracíte v uloženém procesu?

  3. MySQL – Počkejte několik sekund pomocí SELECT SLEEP()

  4. Jak přejmenovat tabulku v aplikaci Access