Cinghia, questa è una domanda complicata.Qual è il modo migliore di adattare questo sistema di sicurezza per gestire l'ereditarietà multipla?
Abbiamo un sistema che si occupa di grandi set di dati. (da milioni a miliardi di dischi per tavolo grande). Tutti i dati sono gestiti in una struttura ad albero di nodi.
Utilizziamo Symfony2 e il sistema di sicurezza Symfony2 (Oggetti dominio, Acl, Aces ecc.). Il nostro albero Acl rispecchia il nostro albero dei nodi.
a coniare una lingua:
DP
permesso definito, vale a dire un record di ace su questo nodo ACLEP
permessi efficace, nessun record asso, autorizzazione ereditata da un genitore con unDP
Per logica aziendale, assegniamo 0 o 1 asso a un oggetto per utente e ci affidiamo all'ereditarietà dove non ce n'è. Root > lvl1 (DP: VIEW) > lvl2 > lvl3 (EP: VIEW)
Finora, tutto bene. Tutto funziona.
Alcuni nodi non solo hanno un genitore, ma sono associati ad altri nodi (molti a molti). Quando un nodo è associato a un altro nodo, questo rappresenta un percorso separato nell'albero da seguire per gli ACL. IE avremmo 1 o più percorsi sull'albero da radicare per raccogliere gli assi.
Leaf < Parent < GrandParent < Root
Leaf < AssociatedNode < AssociatedNodeParent < AssociatedNodeGrandParent < Root
...
o la logica per gestire la votazione degli assi va bene, ciò che siamo sicuri di è come rappresentare i percorsi multipli contro l'albero. La nostra attuale (leggi: cattivo) le idee sono:
- comportamento genitore multipla nella struttura di ACL
- Pro
- Sembra più pulito?
- Contro
- Quasi tutta la riscrittura del sistema di sicurezza per mettere questo in.
- ratsnesting potenziale.
- Pro
- identità duplicate degli oggetti/ACL contro entità, specificando genitori diversi.
- Pro
- Er ...
- Contro
- creerà una grande quantità di record ACL potenzialmente.
- Difficile da gestire nel codice.
- Pro
Non ho una risposta alla tua domanda, ho paura ma se riesci a risolverlo, sarei estremamente interessato a leggere come hai fatto :-) – richsage
Ciò che non ho ricevuto dalla tua domanda è perché ogni nodo non ottiene un permesso (ad es. ereditato dal genitore?). Ancora più importante, perché hai bisogno di percorsi diversi attraverso gli ACL, in primo luogo? Qual è il tuo * caso d'uso *? La maggior parte delle volte penso che la risposta sia semplice quando si visualizzano i casi d'uso anziché le soluzioni tecniche a un problema. –
Puoi chiarire "* assegniamo 0 o 1 asso a un oggetto *": un '0' significa 'autorizzazione esplicita negativa' o 'mancanza di permesso (positivo)'? – Jacco