Skip to content

Instantly share code, notes, and snippets.

@Pooky
Created December 24, 2016 20:56
Show Gist options
  • Save Pooky/07ec14fb0d54d1aea4a3a5d12489ba43 to your computer and use it in GitHub Desktop.
Save Pooky/07ec14fb0d54d1aea4a3a5d12489ba43 to your computer and use it in GitHub Desktop.
rbac ALGORITMUS
## Algoritmus pro získání rolí z množiny uživatel x oprávnění
Výsledkem tohoto algoritmu je množina rolí R, ve které jsou extrahovány optimální role s výčtem uživatelů, kteří tuto roli vlastní a společně s oprávněnými, která tato role má.
Krom těchto rolí, je výsledkem i množina zbytkových oprávnění, společně se seznamem uživatelů.
Algoritmus:
- vstupní parametry :
* k = nejmenší počet oprávnění v roli
* n = minimální počet uživatelů vlastnící roli
* z = optimální velikost role
* množina uživatel x oprávění [0,1] *(binární matrix)*
#### Postup algoritmu
1 ) Extrakce všech možných rolí
**Pro všechny uživatele v úplném binárním matrixu:**
* Vyber všechna jejich oprávnění
* Má uživatel méně oprávnění než **k** ?
* ulož všechny uživatelova oprávnění jako **zbytková oprávnění**¨
* přidej uživatele ke každému zbytkovému oprávnění
* přejdi na dalšího uživatele
* Ulož oprávnění do množiny **oprávnění na zpracování**
* PRO VŠECHNA oprávnění v množině **oprávnění na zpracování**
* Vyber počet oprávnění větší než **k**
* aplikace algoritmu kombinací
* u daných kombinací nezáleží na pořadí
* je nutné mít všechny kombinace > k
* http://stackoverflow.com/a/29914908
* Nejsou tyto oprávnění ještě v množině **ROLE**?
* ulož novou Roli Rx do množiny **ROLE**
* přidej této roli Rx všechna oprávnění
* JINAK
* vyber roli, která má shodné oprávnění role
* přičti jedničku k proměné **počet uživatelů vlastnící tuto roli**
* přidej uživatele k této roli do proměnné **uživatelé role**
2) Seřaď ROLE podle kritérí sestupně
- **Kritérium: velikost role**
- v porovnání role, zvýhodni role, které mají nejbližší odstup od optimální velikosti role
- **absolutní hodnota (počet oprávnění - optimální počet oprávnění)**
- **Kritérum: počet uživatelů**
- v porovnání role, zvýhodi role, které mají vyšší počet uživatelů
*Díky tomuto setřídění, lze iterovat role a postupně odebírat, jelikož vrchní role mají větší důležitost, než role následující.*
3) PRO VŠECHNY ROLE
- Existuje už role se stejnými oprávněnmi?
- Odeber tuto roli
- existuje už role, která je podřazená nebo nadřazená aktuální roli?
- lze z aktuální role oddělit roli podřazenou či nadřazenou?
- budou obě role vyhovovat providlu >= než **k**?
- POKUD ANO
- **proveď rozdělení rolí**
* přidej všem uživatelům nadřazené role, roli podřazenou
* přidej všem uživatelům podřazené role, roli nadřazenou
* odeber oprávnění role podřazené z role nadřazené
* **Znovu setřiď role**
* *Rozdělením role se mohla porušit hiearchie rolí, proto je potřeba role znovu setřídit a znovu projít.*
- obsahuje role některé oprávnění z aktuální role?
- má tato role stejné uživatele, jako testovaná role?
- **tato role je duplicitní, odeber tuto roli.**
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment