Sto provando a formulare un modello di autorizzazione RBAC che consenta la separazione tra le autorizzazioni e gli ambiti su cui vengono applicate tali autorizzazioni. Non sono stato in grado di trovare un modello standard che descriva questo.
Ecco un esempio:
- Un'autorizzazione consiste in un'operazione su una risorsa:
- (View) (Ops Reports)
- (Create) (Ops Reports)
- (Manage) (Releases)
- I ruoli sono raccolte di permessi:
- A (Product Manager) can (Manage Releases) and (View Ops Reports)
- A (Ops Manager) can (Create Ops Reports) and (View Ops Reports)
- Gli utenti possono essere assegnati ai ruoli:
(Alice) and (Bob) are (Product Manager)s
Finora, questo è RBAC-0 standard. Ora aggiungiamo un altro layer ortogonale:
- (Alice) is a (Product Manager) for "Cool New Product (CNP)"
- (Bob) is a (Product Manager) for "Flagship Product (FSP)"
- (Charlie) is a (Product Manager) for ...
- ...
Questo sembra un caso d'uso abbastanza comune.
In un'implementazione ingenua, è possibile duplicare ruoli e autorizzazioni per ogni prodotto. Quindi anziché:
- (Product Manager)
- (Manage) (Releases)
- (View) (Ops Reports)
ora abbiamo:
- (CNP Product Manager)
- (Manage) (CNP Releases)
- (View) (CNP Ops Reports)
- (FSP Product Manager)
- (Manage) (FSP Releases)
- (View) (FSP Ops Reports)
- ...
- ...
Questo può rapidamente crescere di mano. Come modellare questo scenario per evitare la duplicazione esponenziale?