检查Windows用户是否存在其中一个AD组(ADgroup1,AD group2,ADgroup3等)

问题描述 投票:0回答:1

我目前有代码检查用户是否属于单个AD组,但如何检查此用户是否属于多个AD组。以下是我必须检查单个组的代码

PrincipalContext ctx = new PrincipalContext(ContextType.Domain,Environment.UserDomainName);

        // find a user
        UserPrincipal user = UserPrincipal.FindByIdentity(ctx, Environment.UserName);

        // find the group in question
        GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "ADGROUP1");

        if (user != null)
        {
            if (user.IsMemberOf(group))
            {
                //Enable certain Form Buttons and objects for IT Users
                authTbox.Visible = true;
            }
        }

如何检查同一用户是否属于ADgroup2,ADGroup3,..等。

我在论坛和谷歌搜索,但找不到有效的解决方案。实现此目的的一种方法是通过定义多个组并在if子句中使用OR检查所有组。请参见下文

EX:

     GroupPrincipal group1 = GroupPrincipal.FindByIdentity(ctx, "ADGROUP1");
         GroupPrincipal group2 = GroupPrincipal.FindByIdentity(ctx, "ADGROUP2");
 if (user != null)
            {
                if (user.IsMemberOf(group) ||user.IsMemberOf(group1) || user.IsMemberOf(group2) )
                {
                    //Enable certain Form Buttons and objects for IT Users
                    authTbox.Visible = true;
                }
            }

由于我将不得不搜索10个这样的团体,我很想知道是否有一种有效的方法来实现这一目标。

c# winforms active-directory
1个回答
0
投票

将您想要的组放入ArrayList<T>或其他IEnumerable<T>容器中并循环它们:

List<GroupPrincipal> groupList = new List<GroupPrincipal>
{
    GroupPrincipal.FindByIdentity(ctx, "ADGROUP1"),
    GroupPrincipal.FindByIdentity(ctx, "ADGROUP1")
    // ...
}
foreach(var group in groupList) 
{
    if(user.IsMemberOf(group)
    {
        // do something
    }
}

这是最直截了当的。这样,您还可以在配置文件或数据库中定义每个组,并简单地获取所需的一切。

如果你需要简单的质量确认,那就是Enumerable.All<TSource>方法:

List<GroupPrincipal> groupList = new List<GroupPrincipal>
{
    GroupPrincipal.FindByIdentity(ctx, "ADGROUP1"),
    GroupPrincipal.FindByIdentity(ctx, "ADGROUP1")
    // ...
}
if(groupList.All(g => user.IsMemberOf(g)) 
{ 
    // do something 
}

作为一个小注释:根据您的使用情况,您可能希望将控件元素设置为启用/禁用而不是可见性。这样您只需要维护一个界面布局。

© www.soinside.com 2019 - 2024. All rights reserved.