Questo è un problema classico. Sono stato interessato a questo da qualche tempo a questa parte e non sono a conoscenza di nessun modello standard che lo risolva veramente (ancora).
L'RBAC può essere adattato per funzionare per la tua situazione introducendo i parametri. Esistono diversi nomi per questi adattamenti, il più comune è l'RBAC parametrizzato (pRBAC). Ho anche visto nomi come RBAC Context Aware, RBAC Object Aware e RBAC relazionale, che sono incarnazioni diverse della stessa idea di base. Sfortunatamente, alcuni di questi termini, perché non c'è standardizzazione o consenso, si riferiscono anche ad altri modelli di accesso.
Ci sono molti concetti di pRBAC che fluttuano, che differiscono tutti nei dettagli ma sono ancora in gran parte la stessa idea.
Puoi dare un'occhiata ai documenti A Design for Parameterized Roles di Mei Ge e Sylvia L. Osborn . Un modello formale è stato descritto da Ali E. Abdallah e Etienne J. Khayat nel loro documento Un modello formale per il controllo degli accessi con controllo parametrico basato sui ruoli .
Proprio come in RBAC standard, in pRBAC, a un soggetto viene assegnato un ruolo. Il ruolo consiste in una o più autorizzazioni, ciascuna autorizzazione consiste in un'operazione, una coppia di oggetti.
In estensione a RBAC, pRBAC consente agli oggetti di avere parametri e utenti da inizializzare per un determinato ruolo con i valori dei parametri per un oggetto su cui hanno un'autorizzazione in quel ruolo.
Quindi, ad esempio, all'oggetto studentCourseResult
verrebbe assegnato il parametro studentId
. Invece di avere un ruolo chiamato Teacher
, definirai il ruolo TeacherOf
con i valori parametro studentId = {1, 2, 7, 9, 11}
.
Se il valore del parametro per l'oggetto si trova all'interno dell'insieme di valori di parametro assegnati a un oggetto per questo ruolo, l'accesso è concesso.
Si noti che è un passo facile da qui per non solo consentire l'operatore =
per i vincoli dei parametri, ma anche consentire >
, <
, <=
, ecc.
Oltre a pRBAC potresti dare un'occhiata a Controllo dell'accesso basato sugli attributi (ABAC) , che al momento è abbastanza di moda ( ma risolve un problema diverso e ne crea di nuovi) e controllo dell'accesso basato su autorizzazione (ZBAC) che è sicuramente un concetto molto interessante, ma probabilmente eccessivo per il caso d'uso che descrivi, in quanto per lo più (e molto ordinatamente) risolve il problema dell'autorizzazione cross domain.