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

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


FileInfo.SetAccessControl(FileSecurity) Метод

Определение

Применяет записи списка управления доступом (ACL), описанные объектом FileSecurity к файлу, описанному текущим объектом FileInfo.

C#
public void SetAccessControl(System.Security.AccessControl.FileSecurity fileSecurity);

Параметры

fileSecurity
FileSecurity

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

Исключения

Параметр fileSecuritynull.

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

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

Примеры

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

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

namespace FileSystemExample
{
    class FileExample
    {
        public static void Main()
        {
            try
            {
                string FileName = "c:/test.xml";

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

                // Add the access control entry to the file.
                // Before compiling this snippet, change MyDomain to your
                // domain name and MyAccessAccount to the name
                // you use to access your domain.
                AddFileSecurity(FileName, @"MyDomain\MyAccessAccount", FileSystemRights.ReadData, AccessControlType.Allow);

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

                // Remove the access control entry from the file.
                // Before compiling this snippet, change MyDomain to your
                // domain name and MyAccessAccount to the name
                // you use to access your domain.
                RemoveFileSecurity(FileName, @"MyDomain\MyAccessAccount", FileSystemRights.ReadData, AccessControlType.Allow);

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

        // Adds an ACL entry on the specified file for the specified account.
        public static void AddFileSecurity(
            string FileName,
            string Account,
            FileSystemRights Rights,
            AccessControlType ControlType
            )
        {
            // Create a new FileInfo object.
            FileInfo fInfo = new(FileName);

            // Get a FileSecurity object that represents the
            // current security settings.
            FileSecurity fSecurity = fInfo.GetAccessControl();

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

            // Set the new access settings.
            fInfo.SetAccessControl(fSecurity);
        }

        // Removes an ACL entry on the specified file for the specified account.
        public static void RemoveFileSecurity(
            string FileName,
            string Account,
            FileSystemRights Rights,
            AccessControlType ControlType
            )
        {
            // Create a new FileInfo object.
            FileInfo fInfo = new(FileName);

            // Get a FileSecurity object that represents the
            // current security settings.
            FileSecurity fSecurity = fInfo.GetAccessControl();

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

            // Set the new access settings.
            fInfo.SetAccessControl(fSecurity);
        }
    }
}
//This code produces output similar to the following;
//results may vary based on the computer/file structure/etc.:
//
//Adding access control entry for c:\test.xml
//Removing access control entry from c:\test.xml
//Done.
//

Комментарии

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

Используйте метод SetAccessControl всякий раз, когда необходимо добавить или удалить записи ACL из файла.

Внимание!

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

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

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

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

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

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

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

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

  5. Задайте целевой объект FileSecurity целевому файлу с помощью метода 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