Как получить разрешения группы безопасности для данного пользователя / группы в C # - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь выяснить, какие разрешения имеет пользователь для данной группы безопасности.Например, у меня есть чтение, чтение / запись, администратор и т. Д.

Я получаю список групп, к которым они принадлежат, но не могу понять, как получить разрешения для этих групп.

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 Ответ

0 голосов
/ 12 декабря 2018

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("-------");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...