Ler em inglês

Compartilhar via


DirectoryInfo.SetAccessControl(DirectorySecurity) Método

Definição

Aplica entradas acl (lista de controle de acesso) descritas por um objeto DirectorySecurity ao diretório descrito pelo objeto DirectoryInfo atual.

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

Parâmetros

directorySecurity
DirectorySecurity

Um objeto que descreve uma entrada acl a ser aplicada ao diretório descrito pelo parâmetro path.

Exceções

O parâmetro directorySecurity é null.

Não foi possível encontrar ou modificar o arquivo.

O processo atual não tem acesso para abrir o arquivo.

Exemplos

O exemplo a seguir usa os métodos GetAccessControl e SetAccessControl para adicionar e remover uma entrada acl (lista de controle de acesso) de um diretório.

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);
        }
    }
}

Comentários

Uma ACL (lista de controle de acesso) descreve indivíduos e grupos que têm, ou não têm, direitos a ações específicas no arquivo ou diretório especificado. Para obter mais informações, consulte Como adicionar ou remover entradas de lista de controle de acesso.

O método SetAccessControl aplica entradas ACL a um arquivo que representa a lista de ACL não herdada.

Cuidado

A ACL especificada para directorySecurity substitui a ACL existente para o diretório. Para adicionar permissões para um novo usuário, use o método GetAccessControl para obter a ACL existente e modificá-la.

O método SetAccessControl persiste apenas DirectorySecurity objetos que foram modificados após a criação do objeto. Se um objeto DirectorySecurity não tiver sido modificado, ele não será mantido em um arquivo. Portanto, não é possível recuperar um objeto DirectorySecurity de um arquivo e reaplicar o mesmo objeto para outro arquivo.

Para copiar informações de ACL de um arquivo para outro:

  1. Use o método GetAccessControl para recuperar o objeto DirectorySecurity do arquivo de origem.

  2. Crie um novo objeto DirectorySecurity para o arquivo de destino.

  3. Use o método GetSecurityDescriptorBinaryForm ou GetSecurityDescriptorSddlForm do objeto DirectorySecurity de origem para recuperar as informações de ACL.

  4. Use o método SetSecurityDescriptorBinaryForm ou SetSecurityDescriptorSddlForm para copiar as informações recuperadas na etapa 3 para o objeto de DirectorySecurity de destino.

  5. Defina o objeto DirectorySecurity de destino para o arquivo de destino usando o método SetAccessControl.

Aplica-se a

Produto Versões
.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