【问题标题】:Check if user is part of administrator group - C#检查用户是否属于管理员组 - C#
【发布时间】:2012-12-26 10:08:51
【问题描述】:

我有代码来验证用户是否存在于本地计算机的管理员组中。如果用户直接存在于管理员组中,则代码可以正常工作

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 上运行

【问题讨论】:

  • 什么版本的 Windows。在 Windows XP 和 Windows Vista 及更高版本中执行此操作的过程会有所不同。
  • 我需要在 Windows Server 2008、2008 R2、2012 和 2012 R2 上验证用户。

标签: c# active-directory windows-server-2008


【解决方案1】:

为什么不直接找到用户的所有 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;
   }
}

【讨论】:

    【解决方案2】:

    这可以判断他们是否属于管理员组:

        WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多