Прочитать на английском

Поделиться через


DirectoryInfo.SetAccessControl(DirectorySecurity) Метод

Определение

Применяет записи списка управления доступом (ACL), описанные объектом DirectorySecurity, к каталогу, описанному текущим объектом DirectoryInfo.

C#
public void SetAccessControl (System.Security.AccessControl.DirectorySecurity directorySecurity);

Параметры

directorySecurity
DirectorySecurity

Объект, описывающий запись ACL для применения к каталогу, описанному параметром path.

Исключения

Параметр directorySecuritynull.

Не удалось найти или изменить файл.

Текущий процесс не имеет доступа к открытию файла.

Примеры

В следующем примере используются методы GetAccessControl и SetAccessControl для добавления и удаления записи списка управления доступом (ACL) из каталога.

C#
using System;
using System.IO;
using System.Security.AccessControl;

namespace FileSystemExample
{
    class DirectoryExample
    {
        public static void Main()
        {
            try
            {
                string DirectoryName = "TestDirectory";

                Console.WriteLine("Adding access control entry for " + DirectoryName);

                // Add the access control entry to the directory.
                AddDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Removing access control entry from " + DirectoryName);

                // Remove the access control entry from the directory.
                RemoveDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Done.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            Console.ReadLine();
        }

        // Adds an ACL entry on the specified directory for the specified account.
        public static void AddDirectorySecurity(
            string DirectoryName,
            string Account,
            FileSystemRights Rights,
            AccessControlType ControlType
            )
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new(DirectoryName);

            // Get a DirectorySecurity object that represents the
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings.
            dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);
        }

        // Removes an ACL entry on the specified directory for the specified account.
        public static void RemoveDirectorySecurity(
            string DirectoryName,
            string Account,
            FileSystemRights Rights,
            AccessControlType ControlType
            )
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new(DirectoryName);

            // Get a DirectorySecurity object that represents the
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings.
            dSecurity.RemoveAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);
        }
    }
}

Комментарии

Список управления доступом (ACL) описывает отдельных лиц и групп, имеющих или не имеющих прав на определенные действия в указанном файле или каталоге. Дополнительные сведения см. в разделе Практическое руководство. Добавление или удаление записей списка управления доступом.

Метод SetAccessControl применяет записи ACL к файлу, представляющего список неустранимых списков ACL.

Внимание!

ACL, указанный для directorySecurity, заменяет существующий список ACL для каталога. Чтобы добавить разрешения для нового пользователя, используйте метод GetAccessControl, чтобы получить существующий ACL и изменить его.

Метод SetAccessControl сохраняет только объекты DirectorySecurity, которые были изменены после создания объекта. Если объект DirectorySecurity не был изменен, он не будет сохранен в файле. Поэтому невозможно получить объект DirectorySecurity из одного файла и повторно применить один и тот же объект к другому файлу.

Чтобы скопировать сведения ACL из одного файла в другой:

  1. Используйте метод GetAccessControl для получения объекта DirectorySecurity из исходного файла.

  2. Создайте новый объект DirectorySecurity для целевого файла.

  3. Используйте метод GetSecurityDescriptorBinaryForm или GetSecurityDescriptorSddlForm исходного объекта DirectorySecurity для получения сведений ACL.

  4. Используйте метод SetSecurityDescriptorBinaryForm или SetSecurityDescriptorSddlForm, чтобы скопировать сведения, полученные на шаге 3, в целевой объект DirectorySecurity.

  5. Задайте целевой объект DirectorySecurity целевому файлу с помощью метода SetAccessControl.

Применяется к

Продукт Версии
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1