Wie kann ich abrufen alle Rollen (Gruppen) ein Benutzer ein Mitglied von?
-
11-09-2019 - |
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?
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
.