2011-06-15 118 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