2011-06-15 50 views
0

我使用UserPrincipal.FindByIdentity(ctx, "SomeAdminAccountName").GetGroups()來授權用戶針對活動目錄中的組。它適用於簡單的組,但不適用於嵌套組。假設我有以下結構:檢查組成員資格

Administrators members: 
    SomeAdminAccountName 

Users members 
    Administrators 
    SomeUserAccountName 

用戶組包含管理員組(因爲所有管理員都應該能夠執行用戶的操作)。問題是UserPrincipal.FindByIdentity(ctx, "SomeAdminAccountName").GetGroups()不包括Users組。

如果我使用GroupPrincipal.FindByIdentity(ctx, groupName).Members我確實看到Administrator組是其中的一部分,但不包括管理員帳戶。

我的問題是:

我需要做遞歸組檢查發現用戶還是有,我還沒有找到另一種方式?

+0

當設置userGroup&adminGroup變量時,您調換了adminGroupName和userGroupName – BellBat 2011-06-15 15:36:38

回答

2

要檢查用戶對組,我會嘗試IsMemberOf。

您也可以從另一個方向處理問題,找到該組,並使用設置了遞歸標誌的GetMembers函數獲取所有成員。由於大多數應用程序使用少量的組,因此應該可以將其緩存以供重用,在我的工作中,通常可以接受5到30分鐘的緩存時間。

+0

使用'GetMembers(true)'是我可以用組來處理羣組的唯一東西。 – jgauffin 2011-06-16 07:13:59

1

你可能是Windows用戶訪問控制(Vista或Win7)的受害者。當管理員在啓用UAC的情況下登錄時,Windows會創建一個「拆分令牌」—,即它們的運行就好像它們的帳戶不是管理員組的一部分一樣,除非/直到他們明確提升運行進程的權限。您可以通過以管理員身份運行來提升執行進程來驗證是否屬於這種情況(或者如果您在VS調試模式下運行,則以管理員身份啓動VS)。

+0

我已關閉UAC,並手動查找要驗證的用戶帳戶。 – jgauffin 2011-06-16 06:55:04

相關問題