Как я могу получить все роли (группы), членом которых является пользователь?
-
11-09-2019 - |
Вопрос
Есть ли способ получить список ролей, в которых находится пользователь, прошедший проверку подлинности Windows, без явной проверки с помощью WindowsPrincipal.IsInRole
способ?
Решение
WindowsPrincipal.IsInRole
просто проверяет, является ли пользователь членом группы с таким именем;группа Windows является Роль.Вы можете получить список групп, членом которых является пользователь, из WindowsIdentity.Groups
собственность.
Вы можете получить WindowsIdentity
от вашего WindowsPrincipal
:
WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity;
или вы можете получить его из заводского метода в WindowsIdentity:
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsIdenity.Groups
представляет собой совокупность IdentityReference
который просто дает вам SID группы.Если вам нужны названия групп, вам нужно будет перевести IdentityReference
в NTAccount
и получите Значение:
var groupNames = from id in identity.Groups
select id.Translate(typeof(NTAccount)).Value;
Другие советы
Редактировать:Джош опередил меня в этом!:)
Попробуй это
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);
}
}
}
}
Если вы не подключены к серверу домена, Translate
функция может выдать следующее исключение The trust relationship between this workstation and the primary domain failed.
Но для большинства групп это будет нормально, поэтому я использую:
foreach(var s in WindowsIdentity.GetCurrent().Groups) {
try {
IdentityReference grp = s.Translate(typeof (NTAccount));
groups.Add(grp.Value);
}
catch(Exception) { }
}
На сайте ASP.NET MVC вы можете сделать это следующим образом:
Добавьте это в свой Web.config:
<system.web>
...
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
...
</system.web>
Тогда вы можете использовать Roles.GetRolesForUser()
чтобы получить все группы Windows, членом которых является пользователь.Убедитесь, что вы using System.Web.Security
.