2013-01-01 10 views
5

Sono interessato ad eseguire il controllo accessi avanzato per consentire agli utenti di accedere alle risorse all'interno dei sistemi software. Io lavoro nel settore sanitario e un ragazzo più giovane ha spesso sottovalutato la complessità di role-based access control in healthcare. Ma questa domanda dovrebbe applicarsi a chiunque abbia esigenze ACL complesse.Librerie avanzate di controllo accessi

Per un certo periodo di tempo, php gacl è stata la mia libreria di go-to allo scopo di gestire i problemi di controllo ACL molto complessi all'interno dei sistemi IT sanitari. Ma ora sto lavorando di più con javascript in generale e con il nodo in particolare. Ho cercato npm per le librerie per fare il controllo degli accessi in modo generalizzabile.

Mi piacerebbe avere il supporto per la definizione di azioni anziché solo utenti e risorse (3 livelli anziché 2) e mi piacerebbe avere utenti, azioni e gruppi di risorse, e implicitamente vorrei avere ereditarietà ACL .

Gli esempi classici the Star Wars themed manual a quella biblioteca sono regole come:

  • Tutti i membri dell'equipaggio hanno (visita, configurare e utilizzare) l'accesso alle l'armi, motori, pozzetto e salone, si aspettano per chewie.
  • Tutti i droidi hanno accesso (visita e uso) al cockpit, ma solo R2D2 ha configurare l'accesso ai motori.
  • Han ha tutti i tipi di accesso a tutti i tipi di risorse .

I concetti di base qui includono l'idea che si può fare le regole che si applicano a entrambi i gruppi di utenti (ad esempio equipaggio, passeggeri o droidi) o individui (Han, e Chewbacca), che si può avere diversi tipi di accesso (visita, configurazione, uso) o gruppi di accesso (maintence access = configure + repair + use) a diverse risorse (motore e cockpit) che possono anche essere raggruppate, (battle-stations = cockpit + guns).

Ciò consente la configurazione di regole di controllo accessi straordinariamente complesse, con un'amministrazione basata su gruppi relativamente semplice.

Finora, non ho visto nulla di simile fuori da php-gacl. Ho dato un'occhiata ai meravigliosi progetti ACL basati su javascript e tutti pubblicizzano semplicità e facilità d'uso piuttosto che completezza. Questo vale anche per altre librerie ACL tipiche di php (ad esempio Zend ACL)

Qualcuno sta lavorando su un progetto "ACL avanzato" per nodo? C'è forse un approccio migliore che dovrei cercare da qualche parte?

php-gacl viene fornito con tre parti, una è una GUI di amministrazione basata su php (che è certamente eccessivamente complessa) e un'API per CRUD sulle regole (che potrebbe essere facilmente convertita in un'interfaccia REST, credo) e un file molto piccolo che fornisce funzionalità di controllo ACL.

Tecnicamente, solo l'ultimo tipo dovrebbe essere completamente portato su nodo per far funzionare quel modello di software?

A un livello più profondo, voglio capire quali approcci sono stati utilizzati con successo per gestire questo problema. In che modo questo problema viene risolto in genere? Punti bonus per coloro che discutono efficacemente di questo problema in termini di nodo/javascript e forse anche di un particolare approccio al database (relazionale vs non relazionale). Capisco che ci sono molte basi teoriche per fare questo giusto/sbagliato (vale a dire un sacco di opinioni su RBAC, vs ACL). Quello che voglio è qualcosa di teoricamente solido, o quasi-solido che ancora "funziona" da un punto di vista della biblioteca.Sono concentrato su Javascript, ma sarebbe bello capire in che modo altre lingue stanno praticamente risolvendo questo problema.

+0

questo è fuori tema per overflow dello stack. –

risposta

3

Se è possibile evitare l'utilizzo di qualsiasi tipo di ACL, di solito si sta meglio. Sono complessi da amministrare. Si sarebbe meglio che modella tre livelli di controlli di sicurezza:

  1. URL/Indirizzo IP/o altri controlli di sicurezza accesspoint
  2. metodo al momento del check risorse. Quali che siano le entità che vuoi modificare o manipolare, devi fare il controllo delle autorizzazioni. OSSIA Tipo di accesso alle regole aziendali.
  3. Controllo risorsa entità. Se un token utente/API/OAuth ha accesso AT ALL a un'entità

Questa operazione può essere eseguita utilizzando un RBAC. I ruoli per la propria organizzazione/sito sono assegnati a un insieme di autorizzazioni di accesso/modifica/manipolazione. Agli utenti viene assegnato un ruolo (i), ma i tre livelli di controllo controllano i PERMESSI, non il ruolo.

Guarderei Spring Security e RBAC come ricerca su google, e modellino su questo. Qui ci sono alcuni link che ho trovato utile:

http://www.xaprb.com/blog/2006/08/16/how-to-build-role-based-access-control-in-sql/

http://www.xaprb.com/blog/2006/08/18/role-based-access-control-in-sql-part-2/

(perché tutti gli esempi 'primitive' e controlli follemente denominati in Primavera di sicurezza, sarete invitati a leggere articoli che offrono l'uso di nomi alternativi e utilizza per il permesso di Primavera 'hasRole()' controlli. il seguente articolo discute questo nella progettazione di un RBAC)

http://springinpractice.com/2010/10/27/quick-tip-spring-security-role-based-authorization-and-permissions/

(Una buona presentazione sugli usi flessibili di Primavera di sicurezza, tra cui RBAC)

http://www.infoq.com/presentations/Spring-Security-3

(Di seguito si fornisce una buona descrizione del problema e le soluzioni RBAC, ed è progettato per PHP)

http://www.tonymarston.net/php-mysql/role-based-access-control.html

quadro

un PHP con un'implementazione RBAC:

http://trac.symfony-project.org/wiki/UserRbac

Infine, il diagramma delle classi per Spring Security. Si noterà che consente di inserire informazioni di sicurezza in una tabella PARALLEL alle entità protette. Questo è in base alla progettazione, in modo che Spring Security possa essere aggiunto in seguito, o estratto, o sostituito facilmente. Ma significa anche più tavoli.

http://code.google.com/p/uclm-esi-alarcos/source/browse/trunk/documentation/memoria-pfc/Figuras/Cap5/spring-security-class-diagram.png?r=295

Problemi correlati