为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
皈依舞 2022-06-12 10:47:46
我试图找出用户对给定安全组具有哪些权限。例如是否有读、读/写、管理员等...我得到了他们所属的组列表,但不知道如何获得这些组的权限。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);        }    }}
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

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

}


查看完整回答
反对 回复 2022-06-12
  • 1 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号