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

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

Ответы [ 4 ]

37 голосов
/ 18 апреля 2009

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;
8 голосов
/ 18 апреля 2009

РЕДАКТИРОВАТЬ: Джош побил меня к этому! :)

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

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);
            }
        }
    }
}
6 голосов
/ 14 мая 2014

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...