Domanda

Qualcuno conosce alcune buone risorse relative all'impostazione di sistemi di account utente gerarchici?Attualmente ne sto configurando uno e sto lottando con alcune delle logiche più complesse (specialmente con la determinazione delle autorizzazioni).Speravo di riuscire a trovare alcune risorse che mi aiutassero.

Alcuni retroscena:Sto costruendo un sistema di account utente per un CMS Web che consenta una gerarchia di gruppi nidificati.A ogni gruppo può essere consentito/negato l'accesso in lettura, scrittura, aggiunta ed eliminazione (esplicitamente per quel gruppo o implicitamente da uno dei suoi genitori).Come se ciò non fosse abbastanza complicato, il sistema consente anche agli utenti di essere membri di più gruppi.-- Qui è dove sono bloccato.Ho impostato tutto, ma ho difficoltà con la logica effettiva per determinare le autorizzazioni per un determinato utente.

È stato utile?

Soluzione

Il manuale di CakePHP contiene un'eccellente descrizione di come funzionano gli elenchi di controllo degli accessi.

http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html

Altri suggerimenti

Rappresenta le autorizzazioni impostate per un determinato gruppo come una maschera di bit.L'operazione OR delle maschere di bit insieme ti darà il set di autorizzazioni risultante.

Aggiornamento per @Alex:

Ho scritto questa risposta 3 anni fa, ma credo che alludessi a quanto segue...

Dalla domanda

una gerarchia di gruppi nidificati.Ogni gruppo può essere consentito/negato l'accesso per leggere, scrivere, aggiungere ed eliminare (esplicitamente per quel gruppo o implicitamente da uno dei suoi genitori).Come se ciò non fosse abbastanza complicato, il sistema consente anche agli utenti di essere membri di più gruppi.-- Qui è dove sono bloccato.Ho impostato tutto, ma sto lottando con la logica reale per determinare le pemissioni per un determinato utente.

Assegna una maschera di bit corrispondente al set di autorizzazioni totale di un gruppo (o ruolo) nel sistema:

per esempio. 00 (usare due bit rende le cose semplici qui!)

La prima parte conferisce Permission A e il secondo Permission B.

Supponiamo ora che il Gruppo A conferisca il seguente set di autorizzazioni: 01.

...e supponiamo che il Gruppo B conferisca il seguente set di autorizzazioni: 10.

Per ottenere il set di autorizzazioni risultante per un utente in un insieme arbitrario di gruppi è possibile eseguire un'operazione logica OR sulle maschere di bit del set di autorizzazioni:

Permission set for Group A   01
Permission set for Group B   10 OR 
                             ----
Resultant permission set     11 (i.e. both permission A and B are conferred)

Non conosco i dettagli del sistema dell'interrogante, ma il sistema qui delineato potrebbe essere ampliato per ottenere diversi comportamenti di composizione del gruppo utilizzando diversi operatori logici.

Guarda le autorizzazioni nel file Sistema di file Andrew.Consente agli utenti di creare e amministrare i propri gruppi, assegnando selettivamente diritti di amministratore e ACL.Potresti scoprire che molti dei dettagli fastidiosi sono già elaborati per te nel loro modello.

Modificare: ecco un collegamento migliore alla documentazione AFS:

http://www.cs.cmu.edu/~help/afs/index.html

Ecco la sezione sui gruppi:

http://www.cs.cmu.edu/~help/afs/afs_groups.html

L'ho già fatto prima e non è un'implementazione banale.Ti consigliamo di esaminare la classe SecurityPermission.

[http://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission.aspx][1]

L'ho già fatto in precedenza utilizzando XML (cosa che non sono sicuro che rifarei) e memorizzando quell'XML come elenco di autorizzazioni all'interno del server SQL in una colonna XML tramite un processo memorizzato CLR.L'XML avrebbe un elemento chiamato "permesso" e quindi il permesso sarebbe effettivamente un ENUM all'interno del codice.Ogni autorizzazione era una nuova implementazione della classe SecurityPermission (collegata sopra) Gli utenti erano legati a gruppi definiti nel server SQL e quindi quando l'utente veniva aggiunto/rimosso ai gruppi, il documento XML veniva aggiornato per riflettere da quali gruppi erano separati Di.

Non appena l'utente ha effettuato l'accesso, le credenziali dell'utente verranno caricate nell'archivio applicazioni (sessione) e quindi sarà possibile accedervi di conseguenza.Quando è necessaria l'autorizzazione, l'XMl nell'archivio applicazioni verrà scaricato e caricato in SecurityPermission tramite il metodo "FromXML".A quel punto utilizzerei i seguenti metodi per determinare se l'utente disponeva dell'autorizzazione:

  • Richiesta
  • Intersecare
  • Unione
  • È illimitato
  • IsSubSetOf

ecc., ecc. ecc.

A quel punto, dopo aver eseguito la richiesta, sono stato in grado di determinare se il chiamante aveva accesso in base a come ho implementato le mie routine di sicurezza in SecurityPermissions.

Ancora una volta, questo tralascia MOLTI dettagli, ma questo dovrebbe portarti sulla strada giusta.

Dai un'occhiata anche a questo spazio dei nomi:[2]: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx "Sistema.Sicurezza.Autorizzazioni"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top