Leer en inglés

Compartir a través de


DirectoryInfo.SetAccessControl(DirectorySecurity) Método

Definición

Aplica entradas de lista de control de acceso (ACL) descritas por un objeto DirectorySecurity al directorio descrito por el objeto DirectoryInfo actual.

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

Parámetros

directorySecurity
DirectorySecurity

Objeto que describe una entrada de ACL que se va a aplicar al directorio descrito por el parámetro path.

Excepciones

El parámetro directorySecurity es null.

No se encontró ni modificó el archivo.

El proceso actual no tiene acceso para abrir el archivo.

Ejemplos

En el ejemplo siguiente se usan los métodos GetAccessControl y SetAccessControl para agregar y, a continuación, quitar una entrada de lista de control de acceso (ACL) de un directorio.

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

Comentarios

Una lista de control de acceso (ACL) describe individuos y grupos que tienen derechos, o no, a acciones específicas en el archivo o directorio especificados. Para obtener más información, vea Cómo: Agregar o quitar entradas de lista de control de acceso.

El método SetAccessControl aplica entradas de ACL a un archivo que representa la lista de ACL noherida.

Precaución

La ACL especificada para directorySecurity reemplaza la ACL existente para el directorio. Para agregar permisos para un nuevo usuario, use el método GetAccessControl para obtener la ACL existente y modificarla.

El método SetAccessControl solo conserva DirectorySecurity objetos que se han modificado después de la creación del objeto. Si no se ha modificado un objeto DirectorySecurity, no se conservará en un archivo. Por lo tanto, no es posible recuperar un objeto DirectorySecurity de un archivo y volver a aplicar el mismo objeto a otro archivo.

Para copiar información de ACL de un archivo a otro:

  1. Use el método GetAccessControl para recuperar el objeto DirectorySecurity del archivo de origen.

  2. Cree un nuevo objeto DirectorySecurity para el archivo de destino.

  3. Use el método GetSecurityDescriptorBinaryForm o GetSecurityDescriptorSddlForm del objeto DirectorySecurity de origen para recuperar la información de la ACL.

  4. Use el método SetSecurityDescriptorBinaryForm o SetSecurityDescriptorSddlForm para copiar la información recuperada en el paso 3 al objeto de DirectorySecurity de destino.

  5. Establezca el objeto DirectorySecurity de destino en el archivo de destino mediante el método SetAccessControl.

Se aplica a

Producto Versiones
.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