IT 部门创建新 AD 组的审批流程非常繁琐,因此我的任务是寻找使用本地组来控制访问的方法。
在 Windows Server 2008 R2 上,我创建了一个本地组,并添加了几个其他 AD 组以及一些 AD 用户帐户作为成员。
我需要编写一些 C# 代码来确定特定的 AD 用户是否属于特定的本地组,其中本地组包含 AD 组和 AD 用户的混合。AD 组在某些情况下可能包含嵌套的 AD 组。
更新
当域用户帐户直接是本地组的成员时,下面的代码有效,但当本地组包含域用户所属的域组时,它不起作用。
public static void Test()
{
// returns true, domain user account user623 is in domain group ...
bool b1 = UserIsInDomainGroup("user623", "apc.app.cartopac.surfaceland");
// returns true - user623 is directly in local.groupa
bool b2 = UserIsInlocalGroup("user623", "local.groupa");
// returns false, even though apc.app.cartopac.surfaceland is in local.groupb
bool b3 = UserIsInlocalGroup("user623", "local.groupb");
}
public static bool UserIsInDomainGroup(string userName, string grpName)
{
var domainContext = new PrincipalContext(ContextType.Domain, "contoso");
var user = UserPrincipal.FindByIdentity(domainContext, userName);
return user.IsMemberOf(domainContext, IdentityType.Name, grpName);
}
public static bool UserIsInlocalGroup(string userName, string localgrpName)
{
var machineContext = new PrincipalContext(ContextType.Machine);
var grpPrincipal = GroupPrincipal.FindByIdentity(machineContext, IdentityType.Name, localgrpName);
var domainContext = new PrincipalContext(ContextType.Domain, "contoso");
var user = UserPrincipal.FindByIdentity(domainContext, userName);
return user.IsMemberOf(grpPrincipal);
}