![](/img/trans.png)
[英]How to check permissions for a user or group in Sharepoint 2010 using C#?
[英]How to get security group permissions for a given user/group in 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);
}
}
}
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("-------");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.