如何在 C# 中获取给定用户/组的安全组权限

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


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


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);

        }

    }

}


皈依舞
浏览 239回答 1
1回答

MMMHUHU

GetAuthorizationGroups()会给你一个GroupPrincipal对象列表。但是,GroupPrincipal不会公开对象的权限。它确实DirectoryEntry在幕后使用,您可以使用:var groupDe = (DirectoryEntry) group.GetUnderlyingObject();然后您可以使用该ObjectSecurity属性查看组对象的权限。不过,这并不是非常直截了当。这个问题实际上有一些非常完整的代码来检索权限(就在问题中)。特别是这个: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("-------");}
打开App,查看更多内容
随时随地看视频慕课网APP