Ho difficoltà a trovare un modo scalabile per creare un sistema di controllo accessi che segua entrambe le best practice e possa scalare bene. Ho esaminato vari approcci come RBAC e ABAC.
Per i casi di utilizzo di cui mi occupo, l'RBAC non sembra essere a grana fine quanto necessario. ABAC (e altri metodi simili come CBAC) sembrano come potrebbero essere sufficienti per quanto riguarda il controllo, ma sembra che introdurranno un sovraccarico significativo in casi complessi. La maggior parte degli esempi e descrizioni di questi quasi sempre sembrano essere applicati in senso lato a un'attività. Ad esempio, alcune attività (esempio: "org: attività") come azioni basate su CRUD. Per molte applicazioni che ho dovuto gestire nel corso degli anni, questo raramente sembra sufficiente.
Un esempio potrebbe essere il seguente:
Resource Type tA:
- Has fields:
- fA
- fB
- fC - must be valid id of type tB
- fD
- fE
Resource Type tB:
- Has fields:
- fA - id
Role rA:
- Can read all fields of tA
- Can create tA
- Can write fields tA.fB, tA.fC, tA.fD with any valid value
Role rB:
- Can read fields fA, fB, fC, fD of tA
- Can create tA
- Can write fields tA.fB, tA.fC
- When writing tA.fC the value must be a value in some subset of all possible values
Role rC:
- Can read fields fA, fB, fD of tA
- Can create tA (tA.fC is automatically set to valid value)
- Can write fields tA.fB, tA.fD
- When writing tA.fD it must be valid value in a subset of all possible values
Nell'esempio precedente, un tipo di attività di creazione e aggiornamento non sembra fornire un controllo sufficiente. La limitazione dell'accesso a questo livello non fornirebbe le restrizioni sul campo. Con ABAC sembrerebbe che una singola richiesta per eseguire un'attività come "creare" o "aggiornare" richiederebbe sia la definizione che la convalida di più politiche. Con più politiche coinvolte, dovrebbero esserci punti decisionali separati per una singola attività? Ad esempio, quando riceviamo una richiesta avremmo un punto decisionale per l'attività nel suo insieme, quindi un punto decisionale che coinvolgerebbe un Principal, una Risorsa e il valore individuale per il campo in cui verrà scritto?
Il modo in cui ho visto questo fatto in passato è solitamente una logica codificata che di solito comportava il controllo di un ruolo e poi l'esecuzione di alcuni controlli correlati. Sulla base di tutto ciò che ho visto, questi tipi di decisioni di autorizzazione hard coded sono considerati anti-pattern, ma non sono sicuro di come sia possibile evitare in modo efficiente tali controlli. Inoltre, questa logica deve essere duplicata sia quando si accede ai dati sia nel livello di presentazione per fornire all'utente le opzioni corrette per l'input. C'è qualcosa che sto fraintendendo per questi tipi di controllo degli accessi? Esiste un metodo che utilizza ABAC, CBAC, PBAC o qualsiasi altro sistema di controllo dell'accesso che possa gestire questo tipo di restrizioni di accesso in un metodo ben progettato?