2009-04-16 5 views
5

Nella mia app mdp asp.net sto utilizzando activedirectorymembershipprovider. Nella directory attiva ho creato un paio di ruoli (gruppi) simili a, per semplicità di questo esempio, "normale" e "amministratore".Come posso implementare una gerarchia di ruoli in un'app mvc asp.net utilizzando activedirectorymembershipprovider

Attualmente sto interrogando se l'utente è in ruolo ottenendo l'IPrincipal di httpcontext e chiamando User.IsInRole (nameOfRoleGoesHere) ;.

L'im comportamento cercando è per me essere in grado di chiedere se l'utente si trova in ruolo di "amministratore" e quindi implicitamente essere chiede se l'utente si trova in tutti i ruoli di seguito che (in questo ruolo caso "normale" sarebbe sotto " amministratore"). Poiché i miei ruoli sono principalmente verticali (se questo ha senso) questo tipo di ereditarietà di ruolo sembra avere un senso per la mia applicazione al momento.

Come posso ottenere questo comportamento: devo implementare una logica personalizzata che mi consenta di chiedere il ruolo di "amministratore", ma di allontanarmi in realtà chiedendo sia "normale" che "amministratore" nella directory attiva dietro le quinte - o è possibile strutturare i gruppi nella directory attiva in qualche modo dandomi questo comportamento automaticamente?

Ci scusiamo per eventuali grossolani equivoci di asp.net, directory attive e .net di sicurezza da parte mia - sono un principiante e sperimentatore.

risposta

3

dC supporta il concetto di un gruppo di essere un membro di un altro gruppo?

Così si potrebbe avere la seguente:

Utenti: Anne, Bob, Charlie, Douglas, Elliot, Fred e George.

Ruoli: normale, Editor, Admin

Poi nel definire ciascun gruppo come:

Admin presenta le seguenti membri: George

Editor ha i seguenti membri: "Admin", Douglas, Elliot

Normale ha i seguenti membri: "Editor", "Admin", Anne, Bob, Charlie

Pertanto, si sa che George è un membro di Normal, Editor e Admin, perché tutti i membri di Admin sono inclusi in questi gruppi, mentre Douglas è solo un membro di Editor e Normal, e Anne è solo un utente normale, e AD direbbe "sì, George è un utente normale" se richiesto.

TUTTAVIA: non (per quanto ne so) C'è un ufficiale, MS supportato ActiveDirectory RoleProvider che popolano il RolesPrinciple con i ruoli AD corretti - ci sono un paio là fuori like this one on CodePlex quello che hai definito come il tuo fornitore di ruolo?

Il provider di ruoli predefinito ASP.NET non supporta le gerarchie di ruolo, in modo che avrebbe sia bisogno di uno:

  1. Mettere l'utente in ogni ruolo a cui hanno accesso, e verificare solo per il ruolo che si sei interessato a.
  2. Metti l'utente nel ruolo più potente a cui può accedere, quindi controlla tutti i ruoli che dovrebbero avere accesso.
  3. Scrivi/trova uno role provider che supporta le gerarchie, restituendo semplicemente true se l'utente si trova in un ruolo di ordine superiore.
+1

Quando hai definito il ruolo/gruppo Normale, hai dovuto includere "Admin" come membro di quel gruppo? (la mia ipotesi non è perché l'Admin è già incluso nel gruppo Editor che è nel gruppo Normal. – Guy

+0

Per essere onesti probabilmente no, ma ero al sicuro piuttosto che dispiaciuto;) –

1

Active Directory non ha realmente un concetto di gerarchia in termini di appartenenza. Un utente è membro di uno, più gruppi, ma solo quello. È membro del gruppo "Admin" - sì o no. Potrebbe anche essere membro di GRoup A, Gropu B, Group F e Group M - ma non c'è una vera "gerarchia di ruoli" come stai cercando.

Suppongo, in un certo senso, che la possibilità di combinare un numero qualsiasi di appartenenze ai gruppi sia probabilmente anche più flessibile e affidabile rispetto a una gerarchia, a mio parere.

Marc