Sto lavorando al componente di controllo degli accessi di un'applicazione web complessa. Uno degli obiettivi è avere un modello rigorosamente definito per chi può fare cosa, ma non riesco a trovare un modello esistente che soddisfi i nostri bisogni.
Il problema è definire un sistema che posso interrogare con coppie di oggetti (in genere un utente e qualcos'altro, ma non necessariamente) per trovare il livello appropriato di accesso in base alla struttura dell'applicazione. Questi 'oggetti' sono - nel mio caso - 'modelli' in una webapp in stile MVC. Supponi che uno dei modelli sia un blog e un altro sia un gruppo di interesse di qualche tipo; un blog può appartenere a un gruppo, un utente può appartenere a un blog o a un gruppo e il gruppo può appartenere a un altro gruppo. Un esempio del tipo di regole che voglio utilizzare: "un utente può pubblicare commenti su un blog se l'utente è membro di un gruppo a cui appartiene quel blog"; 'un utente può visualizzare un blog se l'utente è membro di un gruppo che è esso stesso un membro di un gruppo a cui appartiene il blog', e così via.
Questi casi sono abbastanza facili da implementare esplicitamente nel codice, ma mi piacerebbe un modello formale come RBAC e amici. Esiste una cosa del genere? Se no, c'è una buona ragione per cui?
(Modificato per - si spera! - chiarezza)
Ulteriori modifiche per maggiore chiarezza:
Per gentile concessione del collegamento di Dennis, una definizione di RBAC:
Unlike ACLs, access to a resource is determined based on the relationship
between the requester and the organization or owner in control of the
resource; in other words, the requester’s role or function will determine
whether access will be granted or denied.
In questi termini, sono interessato a "relazioni [s] più complesse tra il richiedente e l'organizzazione ...", insieme a relazioni simili tra le organizzazioni e le risorse del sistema: piuttosto che ogni risorsa ha una lista , stabilito dal suo proprietario, dicendo che "tale e tale ruolo ha un tale e un tale livello di accesso", voglio che il livello di accesso sia determinato dalla (eventualmente complessa) relazione tra l'utente e il "proprietario" 'e tra il proprietario e la risorsa.
Concettualmente ho un grafico che include utenti, organizzazioni e risorse e voglio che le regole di controllo degli accessi siano determinate (in parte) dalla struttura di quel grafico.
Modifica: il tipo di cosa di cui sto parlando è del tutto simile ai "predicati della politica" in S4.2 di link .