2009-05-28 18 views
11

Sto tentando di aggiungere l'autenticazione di ruoli a un'azione in un controller in un'applicazione ASP.NET MVC. Il codice simile a questa:Ruoli disponibili con autenticazione di Windows

[Authorize(Roles = "SomeRoleName")] 
public ActionResult Index() 
{ 
    bool inRole = User.IsInRole("Admin"); 

Se rimuovo l'attributo Autorizza e mettere un punto di interruzione sull'ultima riga in questo esempio di codice, c'è un modo che io possa ispezionare gli oggetti e scoprire quali sono disponibili i ruoli ?

ad es. Chiamo User.IsInRole ("Admin) nella finestra Immediata e mi darà un valore vero/falso Come posso accedere alla collezione di ruoli disponibili?

+0

Può chiarire la tua domanda se siete alla ricerca per i ruoli assegnati all'utente corrente o tutti i possibili ruoli che un utente potrebbe appartenere a? –

risposta

15

Se non avete bisogno di fare questo programatically, ma si sta cercando di determinare il corretto gruppi di Windows/ruoli che devono essere specificati, è possibile utilizzare questo dalla riga di comando:

C:\> net group /domain (lists all Roles in the domain) 
C:\> net user <username> /domain (lists info, including roles for a user) 

Altrimenti sarà necessario interrogare la parte LDAP di Active Directory o usare qualcosa sotto DirectoryServices.

Date un'occhiata a questi siti web per accedere ad Active Directory tramite C#:

+1

Esegui 'gpresult/Z' da un prompt dei comandi ... – ErikE

+1

Bene, il link howto mi porta ora alle" date cinesi ". –

+0

Nel caso in cui qualcun altro vaga qui. Il collegamento per "Howto: (quasi) Tutto in Active Directory tramite C# - Codeproject" è: https://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C –

2

È possibile utilizzare i vari metodi sulla classe RoleProvider in Sistema . .Web.Security.Roles.Provider

Vedere questo per più: Role Provider

1

sto indovinando che non si utilizza un provider di ruoli qui, ma ricadendo sulla funzionalità sottostante WindowsPrincipal dove i ruoli mappa ai gruppi dell'utente.In ogni caso, non penso che si possa fare di più che enumerare i gruppi di windows disponibili su quella macchina/in quel dominio. Non sono sicuro se questo aiuta, ma questo è tutto ciò che posso dire senza avere un'idea di cosa stai cercando di fare con la lista dei ruoli.

7

Aggiungi questo al vostro web.config sotto system.web:

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"/> 

Quindi è possibile utilizzare:

string[] arr = Roles.GetRolesForUser(User.Identity.Name); 

o:

string[] arr = Roles.GetRolesForUser(); 

enter image description here

+1

grazie, questo dà tutti i ruoli locali e di dominio molto velocemente, ad esempio anche BUILTIN \\ gruppo Administrators –

Problemi correlati