Domanda

C'è un modo per ottenere un elenco di ruoli di un utente di Windows autenticato è in, senza esplicitamente la verifica con il metodo WindowsPrincipal.IsInRole?

È stato utile?

Soluzione

WindowsPrincipal.IsInRole solo controlla se l'utente è un membro del gruppo con quel nome; un gruppo di Windows è una di ruolo. È possibile ottenere un elenco dei gruppi che un utente è un membro di dalla proprietà WindowsIdentity.Groups.

È possibile ottenere WindowsIdentity dal WindowsPrincipal:

WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity;

o si può ottenere da un metodo factory on WindowsIdentity:

WindowsIdentity identity = WindowsIdentity.GetCurrent();

WindowsIdenity.Groups è una raccolta di IdentityReference che appena ti dà il SID del gruppo. Se avete bisogno i nomi dei gruppi è necessario tradurre il IdentityReference in un NTAccount e ottenere il valore:

var groupNames = from id in identity.Groups
                 select id.Translate(typeof(NTAccount)).Value;

Altri suggerimenti

EDIT: Josh mi ha battuto ad esso! :)

Prova questo

using System;
using System.Security.Principal;

namespace ConsoleApplication5
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var identity = WindowsIdentity.GetCurrent();

            foreach (var groupId in identity.Groups)
            {
                var group = groupId.Translate(typeof (NTAccount));
                Console.WriteLine(group);
            }
        }
    }
}

Se non si è connessi al server di dominio, la funzione Translate può gettare il seguente The trust relationship between this workstation and the primary domain failed. eccezione

Ma per la maggior parte dei gruppi, che sarà ok, per cui uso:

foreach(var s in WindowsIdentity.GetCurrent().Groups) {
    try {
        IdentityReference grp = s.Translate(typeof (NTAccount)); 
        groups.Add(grp.Value);
    }
    catch(Exception) {  }
}

In un sito ASP.NET MVC, si può fare in questo modo:

Aggiungi questo al vostro web.config:

<system.web>
  ...
  <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
  ...
</system.web>

Quindi è possibile utilizzare Roles.GetRolesForUser() per ottenere tutti i gruppi di Windows che l'utente è un membro di. Assicurati di essere using System.Web.Security.

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