首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查windows用户是否存在其中一个AD组(ADgroup1、AD group2、ADgroup3等)

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

Stack Overflow用户
提问于 2018-02-10 03:15:14
回答 1查看 542关注 0票数 0

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

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

代码语言:javascript
复制
        // 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检查以下所有groups..see

例如:

代码语言:javascript
复制
     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个这样的组,我只是想知道是否有一个有效的方法来实现这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-10 03:22:56

将所需的组放入ArrayList<T>或其他IEnumerable<T>容器中,然后循环遍历它们:

代码语言:javascript
复制
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
    }
}

这是最简单明了的。通过这种方式,您还可以在confifg文件或数据库中定义每个组,并简单地获得所需的一切。

如果您需要简单的批量确认,可以使用Enumerable.All方法:

代码语言:javascript
复制
List<GroupPrincipal> groupList = new List<GroupPrincipal>
{
    GroupPrincipal.FindByIdentity(ctx, "ADGROUP1"),
    GroupPrincipal.FindByIdentity(ctx, "ADGROUP1")
    // ...
}
if(groupList.All(g => user.IsMemberOf(g)) 
{ 
    // do something 
}

顺便提一下:根据您的用例,您可能希望将控件元素设置为启用/禁用,而不是可见性。这样你只需要维护一个界面布局。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48712646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档