2011-07-26 11 views
2

我使用下面的代碼段,以檢查給定用戶的是否處於AD分佈組的一部分。如何檢查用戶是否是分發列表/安全組的在AD C#中的構件

static bool IsUserMemberOf(string userName, string groupName) 
{ 
    using (var ctx = new PrincipalContext(ContextType.Domain)) 
    using (var groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 
    using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName)) 
    { 
    return userPrincipal.IsMemberOf(groupPrincipal); 
    } 
} 

我打電話上述方法用的值作爲IsUserMemberOf("domain\\username","domain\\groupname") 但我看到一個零指示字例外,因爲groupPrincipal是具有空值。

在這方面的任何幫助嗎?

+1

你的代碼工作我的系統上。您確定domain \\ groupname是您使用的上下文中的有效組嗎?可能值得檢查'ctx.ConnectedServer'以確保您連接到您希望連接的域。你也可以嘗試使用不同的組名來檢查你的代碼是否失敗。 'userPrincipal.GetGroups()'函數會給你一個你可以使用的名字列表。 –

+0

我也試過你的代碼,它也適用於我。我從用戶名和組名中省略了domain \\部分。 –

+0

另外,您的用戶是否有可能與查詢的組不在同一個域中?如果是這種情況,你的方法將不起作用。不幸的是,我沒有解決這個問題的辦法。我遇到過類似的問題,從來沒有找到足夠的答案。 – RLH

回答

0

其實我集團是比我查詢用戶不同的域: 我做了如下改變我的計劃,現在的工作。

和我打電話是這樣的:

IsUserMemberOf("domain1\\username","domain2\\groupname") 


static bool IsUserMemberOf(string userName, string groupName) 
{ 
using (var ctx = new PrincipalContext(ContextType.Domain,"domain1")) 
using (var groupPrincipal = GroupPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain,"domain2"), groupName)) 
using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName)) 
{ 
    return userPrincipal.IsMemberOf(groupPrincipal); 
} 

}

1

這只是意味着:

groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 

返回一個空指針,因爲你的組不存在於您的域。你只需要測試你的VAR ctxuserPrincipalgroupPrincipal

相關問題