我目前有代码检查用户是否属于单个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个这样的小组,所以我很想知道是否有一种有效的方法来实现这一目标。
答案 0 :(得分:0)
将您想要的群组放入Array
,List<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
}
}
这是最直截了当的。这样,您还可以在confifg文件或数据库中定义每个组,并获得所需的一切。
如果您需要轻松进行质量确认,则可以使用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
}
作为一个小小的旁注:根据您的用例,您可能希望将控制元素设置为启用/禁用而不是可见性。这样您只需要维护一个界面布局。