c# узнать разрешения на папку

237
04 января 2018, 20:42

нашел только вариант как узнать имею ли я разрешения на папку через FileIOPermission. А нужно получить список доменных пользователей и групп которые имеют разрешения на папку и какие (чтение/запись).

Answer 1

В официальной документации MS можно найти все необходимое, но на это требуется некоторое количество терпения и времени на эксперименты, особенно если вы раньше не сталкивались в плотную с администрированием прав доступа ФС под Windows. Описания необходимых классов и методов довольно расплывчаты и плохо покрыты демонстрационными примерами, поэтому короткая шпаргалка будет не лишней, ну а за специфическими деталями уже в документацию. Некоторые необходимые ссылки будут в конце.

Ниже консольная демка, которая покажет права всех пользователей.

using System;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Security.Principal;
class Program
{
    static void Main()
    {
        //получаем дескриптор безопасности объекта ФС
        var filesecurity = File.GetAccessControl("С:\\");
        //получаем список правил безопасности связанных с объектом ФС
        var rules = filesecurity.GetAccessRules(true, true, typeof(NTAccount));
        //группируем правила по аккаунту, для одного аккаунта может быть несколько правил
        var accounts = rules.Cast<FileSystemAccessRule>().GroupBy(r => r.IdentityReference);
        foreach(var acc in accounts)
        {
            Console.WriteLine(acc.Key.Value);
            foreach(var rule in acc)
            {
                Console.WriteLine($"  {rule.AccessControlType}: {rule.FileSystemRights}");
            }
        }
        Console.ReadKey();
    }
}

Дальнейшая модификация под ваши требования не должна составить большого труда.

Несколько важных моментов:

  1. Группы правил "allow" и "deny" хранятся отдельными записями.
  2. Группы правил унаследованные от родительского объекта ФС и заданные явно для текущего хранятся отдельными записями.
  3. Группа правил представлена набором флагов в виде перечисления.
  4. Чтение правил безопасности может быть запрещено этими же правилами, поэтому возможны исключения при отсутствии данных прав.

Полезные ссылки:

File.GetAccessControl Method (String)
Класс FileSecurity
Метод CommonObjectSecurity.GetAccessRules (Boolean, Boolean, Type)
Класс NTAccount

READ ALSO
Получение ImageUrl из запроса

Получение ImageUrl из запроса

Не удается получить объект Image, чтобы затем достать из него ImageUrl, который представляет собой строку в формате base64

275
Unity отсчет времени

Unity отсчет времени

Как можно реализовать отсчет времени в игре через DateTime? Что бы допустим через 24 какое то действие выполнилось

248
Как получить значение тега

Как получить значение тега

Есть html, из которой я хочу получить информациюИспользую HtmlAgilityPack

304