DirectoryInfo.SetAccessControl(DirectorySecurity) Méthode

Définition

Applique les entrées de liste de contrôle d’accès (ACL) décrites par un objet DirectorySecurity au répertoire décrit par l’objet DirectoryInfo actuel.

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

Paramètres

directorySecurity
DirectorySecurity

Objet qui décrit une entrée de liste de contrôle d’accès à appliquer au répertoire décrit par le paramètre path.

Exceptions

Le paramètre directorySecurity est null.

Impossible de trouver ou de modifier le fichier.

Le processus actuel n’a pas accès à l’ouverture du fichier.

Exemples

L’exemple suivant utilise les méthodes GetAccessControl et SetAccessControl pour ajouter, puis supprimer une entrée de liste de contrôle d’accès (ACL) d’un répertoire.

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

Remarques

Une liste de contrôle d’accès (ACL) décrit les individus et les groupes qui ont, ou n’ont pas, des droits pour des actions spécifiques sur le fichier ou le répertoire donné. Pour plus d’informations, consultez Guide pratique pour ajouter ou supprimer des entrées de liste de contrôle d’accès.

La méthode SetAccessControl applique des entrées de liste de contrôle d’accès à un fichier qui représente la liste ACL non utilisée.

Attention

La liste de contrôle d’accès spécifiée pour directorySecurity remplace la liste de contrôle d’accès existante pour le répertoire. Pour ajouter des autorisations pour un nouvel utilisateur, utilisez la méthode GetAccessControl pour obtenir la liste de contrôle d’accès existante et la modifier.

La méthode SetAccessControl conserve uniquement DirectorySecurity objets qui ont été modifiés après la création de l’objet. Si un objet DirectorySecurity n’a pas été modifié, il ne sera pas conservé dans un fichier. Par conséquent, il n’est pas possible de récupérer un objet DirectorySecurity à partir d’un fichier et de réappliquer le même objet à un autre fichier.

Pour copier des informations de liste de contrôle d’accès d’un fichier vers un autre :

  1. Utilisez la méthode GetAccessControl pour récupérer l’objet DirectorySecurity à partir du fichier source.

  2. Créez un objet DirectorySecurity pour le fichier de destination.

  3. Utilisez la méthode GetSecurityDescriptorBinaryForm ou GetSecurityDescriptorSddlForm de l’objet DirectorySecurity source pour récupérer les informations de liste de contrôle d’accès.

  4. Utilisez la méthode SetSecurityDescriptorBinaryForm ou SetSecurityDescriptorSddlForm pour copier les informations récupérées à l’étape 3 dans l’objet DirectorySecurity de destination.

  5. Définissez l’objet DirectorySecurity de destination sur le fichier de destination à l’aide de la méthode SetAccessControl.

S’applique à

Produit Versions
.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