Как я могу получить все роли (группы), членом которых является пользователь?

StackOverflow https://stackoverflow.com/questions/762245

Вопрос

Есть ли способ получить список ролей, в которых находится пользователь, прошедший проверку подлинности 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top