sql >> Databasteknik >  >> RDS >> Mysql

DB-schema för RBAC med flera nivåer av roller

Min erfarenhet när jag experimenterade med en anpassad RBAC-implementering är följande:

  1. Du läser mycket av RBAC-litteraturen och tror att du förstår den. Sedan går du vidare och försöker implementera det, bara för att inse att du inte riktigt förstod det alls. Så småningom blir det vettigt när du går vidare i projektet.

  2. Baserat på din fråga vet du redan vilken affärsdomän du vill tillämpa RBAC på. Men glöm de faktiska affärsobjekten för nu. Din RBAC-implementering bör vara generisk, vilket innebär att du har ett DB-schema som består av tabeller för roll, användare, behörighet, operation etc. Då kommer du att ha objekt som mappar till sådana tabeller (en-till-en-relation).

När du väl har den här RBAC-implementeringen kan den modelleras till praktiskt taget vilken affärsdomän som helst, till exempel en "avdelning" som du har nämnt.

Kom bara ihåg att allt inte är perfekt... Jag har förbättrat/modifierat/härlett från den faktiska RBAC-litteraturen för att lägga till anpassade funktioner, förbättra prestanda, etc.

Jag har inte arbetat med detta på ett tag, så jag hoppas att jag har rätt i följande:

  • Användare:Förekomster skapas och sparas i dess stödtabell.
  • Roll:Instanser skapas och sparas i dess stödtabell. Roller kommer att tilldelas användare.

  • Tillstånd:En behörighet är i grunden en kombination av en operation på ett objekt. Behörigheter tilldelas roller.

  • Operation:En operation är helt enkelt vad du vill. Det kan vara CRUD (skapa, läs, uppdatera, ta bort) eller det kan också vara "skriv ut", "sök" eller något som en människa (eller ett system) kan utföra på ett objekt (eller grupp av objekt).

  • Objekt:Detta är i princip alla dina objekt som utgör din företagsdomän.

För ännu mer kraft kan du implementera begränsningar för att tillämpa en enorm mängd olika begränsningar.

Med detta ramverk bör du kunna kartlägga:

  • Vem kan tilldela användare till en avdelning
  • Vem kan ta bort dem från avdelningar
  • Hur många användare kan vara i en avdelning
  • Vilken typ av användare (baserat på deras tilldelade roller) kan vara på en avdelning
  • Vilka rullar kan utföra vilka operationer till en avdelning (skapa, läsa, uppdatera, ta bort dem)
  • Osc.


  1. Installera MySQL Workbench för databasadministration

  2. MySQL 5.7 RAND() och IF() utan LIMIT leder till oväntade resultat

  3. PHP och MySQL:Beställ enligt senaste datum och begränsa 10

  4. Mysql CASE HITTER INTE för CASE STATEMENT på en lagrad procedur