Sto implementando il controllo degli accessi di un sito intranet. Sarebbe facile se la società non avesse più di 200 dipendenti e autorizzazioni personalizzate per quasi tutti. È una follia, lo so, ma non posso cambiarlo.Esiste una semplice implementazione generica del controllo degli accessi basato su regole?
Quindi, ho cercato di trovare un'implementazione generica che potesse soddisfare le mie esigenze, ma non riuscivo a trovarla, quindi sono andato a farlo da solo. Alla fine, ho trovato una soluzione abbastanza generica che mi ha fatto pensare: qualcuno deve averlo fatto prima!
L'ho chiamato STOP (oggetto Oggetto autorizzazione) Controllo accesso. Ho la seguente relazione:
.-------. .-----------. .-------.
| users |1---*| STOPRules |*---1| tasks |
`-------' '-----------' '-------'
Un ARRESTO regola ha i seguenti attributi
STOPRule {
Subject;
Task;
ObjectType;
Permission;
Relation;
}
La relazione oggetto può essere: proprietario, creatore, revisore, ecc Questo campo non è obbligatorio, per supportare compiti generici. Quando è lì, la relazione tra l'utente corrente e l'istanza dell'oggetto viene calcolata da un delegato. La relazione corrente viene quindi confrontata con la relazione richiesta sulla regola per consentire o negare l'accesso.
Fammi sapere se non ero abbastanza chiaro.
Due domande sorgono:
C'è un'implementazione open source come questo?
Vedi qualche problema che incontrerei seguendo questo percorso?
EDIT: Sono andato avanti e in realtà iniziato ad attuare questo modello. Il primo problema era che avevo bisogno della relazione tra soggetto e oggetto per supportare qualsiasi caso d'uso. Ora, posso memorizzare la seguente regola:
John (soggetto) può (permesso) modifica (task) un ordine (oggetto) se egli è il creatore (relazione) del ordine.
Per favore, potete fornire un caso d'uso REALISTICO che non potrebbe essere espresso usando questo modello?
+1 per l'atmosfera di tipo "spazio ufficio" - probabilmente tutti compilate anche rapporti di tps. – JonH
A parte il design del tuo modello, il [controllo di accesso basato sui ruoli] (http://en.wikipedia.org/wiki/Role-based_access_control) sembra adattarsi al modello di legge? Il tuo titolo era così vicino a questo mi chiedevo se fosse quello che intendevi in origine. –
@Ninefingers no, sfortunatamente non lo è. AC basato su rOle e AC basato su rour condividono lo stesso acronimo ma sono diversi e intendevo il secondo. Sulla CA basata su regole, le regole per l'accesso sono definite nell'oggetto (o risorsa) da proteggere (parlando da una vista di sistema operativo) adattandolo a Web, la cosa più vicina che ho visto è Zend_Acl un'implementazione ACL su Zend framework, ma si aspetta che io carichi tutte le autorizzazioni, dal momento che è rOle e non basato su rUle, presuppone che ci saranno molte meno regole di autorizzazione. – svallory