我有代码验证用户是否在本地计算机上的管理员组中。如果用户直接出现在管理员组
中,则代码可以正常工作using (DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group")) {
foreach (object member in (IEnumerable)groupEntry.Invoke("Members"))
{
using (DirectoryEntry memberEntry = new DirectoryEntry(member))
{
if (memberEntry.Name.ToLower() == UserName.ToLower())
{
IsUserAdmin = true;
break;
}
}
} }
但是,如果用户存在于AD组中并且该AD组已添加到管理员组中,则代码将失败。另一种情况是用户是嵌套AD组的一部分,最后一个AD组是在管理员组中添加的。
如果用户直接添加并且相关的AD组存在时,我们如何检查用户是否属于管理员组?
我想让代码在Windows Server 2008,2008 R2和2012上运行
答案 0 :(得分:2)
为什么不找到该用户的所有AD组,然后像以前一样检查该组是否存在于Administrators组中?您可以按照解决方案here找到用户的所有AD组。然后,您可以修改搜索条件,如:
var adminGroupMembers = (IEnumerable)groupEntry.Invoke("Members");
....
//where userGroups contains all AD group names to which user belongs to
foreach(var group in userGroups)
{
if(adminGroupMembers.Contains(group))
{
IsUserAdmin = true;
break;
}
}
答案 1 :(得分:1)
这将有助于判断它们是否属于管理员组:
WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
return principal.IsInRole(WindowsBuiltInRole.Administrator);