2009-04-17 5 views

ответ

27

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; 
+1

Я использовал 'var identity = User.Identity как WindowsIdentity;' – Jaider

7

EDIT: Джош бить меня к нему! :)

Попробуйте

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

Если вы не подключены к серверу домена, функция Перевести может выбросить исключение «//The trust relationship between this workstation and the primary domain failed.» Но для большинства из групп, это будет хорошо, так Personnally Я использую:

foreach(var s in WindowsIdentity.GetCurrent().Groups) { 
    try { 
     IdentityReference grp = s.Translate(typeof (NTAccount)); 
     groups.Add(grp.Value); 
    } 
    catch(Exception) { } 
} 
+0

Это ответ. –

0

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

Добавьте это к вашему Web.config:

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

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