2009-04-17 75 views

回答

27

WindowsPrincipal.IsInRole只是檢查用戶是否是具有該名稱的組的成員;一個Windows Group 是一個角色。您可以從WindowsIdentity.Groups屬性中獲取用戶所屬的組的列表。

你可以從WindowsIdentityWindowsPrincipal

WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity; 

,或者你可以從一個工廠方法得到它的WindowsIdentity:

WindowsIdentity identity = WindowsIdentity.GetCurrent(); 

WindowsIdenity.GroupsIdentityReference集合這只是給你的SID的組。如果您需要的組名,您將需要翻譯IdentityReferenceNTAccount,並獲得價值:

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

我用`var identity = User.Identity作爲WindowsIdentity;` – Jaider 2014-01-20 15:40:48

7

編輯:喬希打我吧! :)

試試這個

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

這就是答案。 – 2014-12-24 18:20:01

0

在一個ASP.NET MVC的網站,你可以做這樣的:

添加到您的Web.config:

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

然後你可以使用Roles.GetRolesForUser()讓所有的Windows組用戶是的成員。確保你是using System.Web.Security

相關問題