【问题标题】:How to get security group permissions for a given user/group in C#如何在 C# 中获取给定用户/组的安全组权限
【发布时间】:2018-12-13 01:56:41
【问题描述】:

我正在尝试找出用户对给定安全组拥有哪些权限。例如是否有读、读/写、管理员等...

我得到了他们所属的组列表,但不知道如何获得这些组的权限。

private static void FindUserById(PrincipalSearcher ps, PrincipalContext pc, string name)
{
    var up = new UserPrincipal(pc)
    {
        // EmailAddress = wildcard
        // GivenName = wildcard
        Name = name
    };

    ps.QueryFilter = up;

    foreach (var found in ps.FindAll())
    {
        if (found is UserPrincipal user)
        {
            string line = $"{{\"Name\":\"{user.DisplayName}\", \"Email\": \"{user.EmailAddress}\"}},";
            var groups = user.GetAuthorizationGroups();

            Console.WriteLine(line);
        }
    }
}

【问题讨论】:

    标签: c# active-directory


    【解决方案1】:

    GetAuthorizationGroups() 将为您提供GroupPrincipal 对象的列表。但是,GroupPrincipal 不会公开对象的权限。它确实在幕后使用DirectoryEntry,您可以通过以下方式访问:

    var groupDe = (DirectoryEntry) group.GetUnderlyingObject();
    

    然后可以使用ObjectSecurity属性查看组对象的权限。

    但这并不是非常直接。 This question 实际上有一些非常完整的代码来检索权限(就在问题中)。特别是这个:

    var accessRules = groupDe.ObjectSecurity.GetAccessRules(true, true, typeof(NTAccount));
    
    foreach (ActiveDirectoryAccessRule ar in accessRules)
    {
        Console.WriteLine($"{ar.IdentityReference.ToString()}");
        Console.WriteLine($"Inherits - {ar.InheritanceType.ToString()}");
        Console.WriteLine($"ObjectType - {ar.ObjectType.ToString()}");
        Console.WriteLine($"InheritedObjectType - {ar.InheritedObjectType.ToString()}");
        Console.WriteLine($"ObjectFlags - {ar.ObjectFlags.ToString()}");
        Console.WriteLine($"AccessControlType - {ar.AccessControlType.ToString()}");
        Console.WriteLine($"ActiveDirectoryRights - {ar.ActiveDirectoryRights.ToString()}");
    
    
        Console.WriteLine($"IsInherited - {ar.IsInherited.ToString()}");
        Console.WriteLine($"PropagationFlags - {ar.PropagationFlags.ToString()}");
        Console.WriteLine("-------");
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-17
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      相关资源
      最近更新 更多