Подтвердить что ты не робот

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

Есть ли способ получить список ролей, в которых находится аутентифицированный пользователь Windows, без явной проверки методом WindowsPrincipal.IsInRole?

4b9b3361

Ответ 1

WindowsPrincipal.IsInRole просто проверяет, является ли пользователь членом группы с таким именем; Группа Windows - это роль. Вы можете получить список групп, членом которых является пользователь из свойства WindowsIdentity.Groups.

Вы можете получить WindowsIdentity из своего WindowsPrincipal:

WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity;

или вы можете получить его из метода factory в WindowsIdentity:

WindowsIdentity identity = WindowsIdentity.GetCurrent();

WindowsIdenity.Groups представляет собой набор IdentityReference, который просто дает вам SID группы. Если вам нужны имена групп, вам нужно перевести IdentityReference в NTAccount и получить значение:

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

Ответ 2

ИЗМЕНИТЬ: Джош избил меня!:)

Попробуйте это

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

Ответ 3

Если вы не подключены к серверу домена, функция 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) {  }
}

Ответ 4

В ASP.NET MVC-сайте вы можете сделать это следующим образом:

Добавьте это в свой Web.config:

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

Затем вы можете использовать Roles.GetRolesForUser(), чтобы получить все группы Windows, членом которых является пользователь. Убедитесь, что вы using System.Web.Security.