Attualmente stiamo sviluppando un software per la gestione dei progetti. E abbiamo difficoltà a decidere l'approccio corretto per implementare la sicurezza. Abbiamo esaminato sia ACL che RBAC e siamo già abbastanza sicuri che abbiamo bisogno di almeno una combinazione di entrambi per motivi specifici. Ma ci sono un paio di problemi che non hanno una bella soluzione in entrambi i mondi. Mi spiego:Complesso Righty System: ACL, RBAC e altro ancora?
Diciamo di avere le seguenti entità:
- utenti, con ruoli diversi, vale a dire
- Project Lead
- Worker
- Admin
- Progetti
- utenti assegnati
- Compiti nel progetto
Ora la seguente regola deve essere espresso: Un utente con il ruolo Worker è solo permesso di visualizzare Attività , che sono legati a un progetto a cui è assegnato.
Il risultato è che un utente è consentito solo per vedere alcuni Compiti in tutta la lista.
Vorremmo utilizzare RBAC per dare ruoli il permesso di leggere in realtà Attività. Ma la condizione non viene applicata in quanto vi sono entità specifiche coinvolte. ACL potrebbe essere utilizzato, ma temiamo l'incubo di mantenere l'ACL voci consitent ai requisiti (Utenti può cambiare, Ruoli può cambiare, nuovi Compiti può essere introdotta una avrebbe dovuto ottenere le voci corrette, che è altrettanto complesso).
Naturalmente ci potrebbero essere domande specifiche durante la visualizzazione di un progetto specifico (WHERE project_id = 123
), ma questo non aiuta per una "Veduta di tutti i miei attuali Tasks", dove praticamente ogni attività può essere considerato per la visualizzazione, ma la ACL dovrebbe essere controllato per ogni singolo ingresso.
E come faccio a garantire cose come "Ottieni i primi 25 compiti che l'utente corrente è autorizzato a vedere" senza caricare tutte le attività dal DB e quindi filtrare in base all'ACL, ovvero la gestione dell'impaginazione.
Grazie per la tua risposta. Dalla mia comprensione quelle regole di business sono quelle che chiamerei "filtraggio nel codice dell'applicazione", che non risolve il mio problema. Vorrei fare una query per recuperare le attività (25) e poi forse alcuni risultati sono filtrati dalla regola aziendale. Quindi dovrei fare un'altra chiamata al DB e filtrare di nuovo fino a quando non posso restituire 25 risultati. Questo non è molto buono secondo me.Nella mia mente vorrei applicare le regole di business alla query SQL e recuperare subito 25 risultati. – pdobrigkeit
Questa domanda è contrassegnata con PHP. Puoi far luce su quale quadro/libreria stai costruendo in cima, se ce ne sono, se deciso? Può rendere la discussione più fruttuosa ... –
Utilizzeremo ZF2. ZF2/ACL e ZfcRbac come moduli. Ma immagino che PHP potrebbe essere il tag sbagliato? – pdobrigkeit