Frage

Gibt es eine Möglichkeit, eine Liste von Rollen, die ein Windows-authentifizierten Benutzer in bekommen, ohne durch WindowsPrincipal.IsInRole Methode explizit überprüft?

War es hilfreich?

Lösung

WindowsPrincipal.IsInRole prüft nur, ob der Benutzer ein Mitglied der Gruppe mit diesem Namen ist; Windows-Gruppe ist eine Rolle. Sie können eine Liste der Gruppen erhalten, dass ein Benutzer ein Mitglied der von der WindowsIdentity.Groups Eigenschaft.

Sie können WindowsIdentity von Ihrem WindowsPrincipal erhalten:

WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity;

oder Sie können es von einer Factory-Methode auf Windows bekommen:

WindowsIdentity identity = WindowsIdentity.GetCurrent();

WindowsIdenity.Groups ist eine Sammlung von IdentityReference mit dem Sie die SID der Gruppe gerade gibt. Wenn Sie die Gruppennamen benötigen, müssen Sie die IdentityReference in eine NTAccount übersetzen und den Wert erhalten:

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

Andere Tipps

EDIT: Josh hat mich zu ihm! :)

Versuchen Sie, diese

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);
            }
        }
    }
}

Wenn Sie nicht mit dem Domain-Server verbunden sind, kann die Translate Funktion die folgende Ausnahme The trust relationship between this workstation and the primary domain failed. werfen

Aber für die meisten Gruppen, wird es in Ordnung sein, so verwende ich:

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

In einer Website ASP.NET MVC, können Sie es wie folgt tun:

Fügen Sie diese auf Ihre Web.config:

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

Dann können Sie Roles.GetRolesForUser() verwenden, um alle Windows-Gruppen zu erhalten, dass der Benutzer ein Mitglied von. Stellen Sie sicher, dass Sie using System.Web.Security.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top