Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

File.SetAccessControl, méthode

Applique les entrées de liste de contrôle d'accès (ACL, Access Control List) décrites par un objet FileSecurity au fichier spécifié.

Espace de noms :  System.IO
Assembly :  mscorlib (dans mscorlib.dll)

public static void SetAccessControl(
	string path,
	FileSecurity fileSecurity
)

Paramètres

path
Type : System.String
Fichier dans lequel les entrées ACL doivent être ajoutées ou supprimées.
fileSecurity
Type : System.Security.AccessControl.FileSecurity
Objet FileSecurity qui décrit une entrée ACL à appliquer au fichier décrit par le paramètre path.

ExceptionCondition
IOException

Une erreur d'E/S s'est produite lors de l'ouverture du fichier.

SEHException

Le paramètre path est null.

SystemException

Le fichier est introuvable.

UnauthorizedAccessException

Le paramètre path a spécifié un fichier qui est en lecture seule.

ou

Cette opération n'est pas prise en charge sur la plateforme actuelle.

ou

Le paramètre path a spécifié un répertoire.

ou

L'appelant n'a pas l'autorisation requise.

ArgumentNullException

Le paramètre fileSecurity est null.

La méthode SetAccessControl applique les entrées ACL à un fichier qui représente la liste ACL non héritée.

Mise en gardeAttention

La liste ACL spécifiée pour le paramètre fileSecurity remplace la liste ACL existante pour le fichier. Pour ajouter des autorisations pour un nouvel utilisateur, utilisez la méthode GetAccessControl pour obtenir la liste ACL existante, modifiez-la, puis utilisez SetAccessControl pour la réappliquer au fichier.

Une liste ACL décrit les individus et/ou les groupes qui disposent ou non de droits pour l'exécution d'actions spécifiques sur le fichier donné. Pour plus d’informations, consultez Vue d'ensemble de la technologie ACL et Comment : ajouter ou supprimer des entrées dans la liste de contrôle d'accès.

La méthode SetAccessControl rend persistants uniquement les objets FileSecurity qui ont été modifiés après la création de l'objet. Si un objet FileSecurity n'a pas été modifié, il ne sera pas rendu persistant dans un fichier. Par conséquent, il n'est pas possible de récupérer un objet FileSecurity dans un fichier et d'appliquer à nouveau le même objet à un autre fichier.

Pour copier les informations ACL d'un fichier vers un autre :

  1. Utilisez la méthode GetAccessControl pour récupérer l'objet FileSecurity dans le fichier source.

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

  3. Utilisez la méthode GetSecurityDescriptorBinaryForm ou GetSecurityDescriptorSddlForm de l'objet FileSecurity source pour récupérer les informations ACL.

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

  5. Définissez l'objet FileSecurity de destination dans le fichier de destination à l'aide de la méthode SetAccessControl.

Dans les environnements NTFS, ReadAttributes et ReadExtendedAttributes sont accordés à l'utilisateur si ce dernier a des droits ListDirectory sur le dossier parent. Pour refuser ReadAttributes et ReadExtendedAttributes, refusez ListDirectory sur le répertoire parent.

L'exemple de code suivant utilise les méthodes GetAccessControl et SetAccessControl pour ajouter puis supprimer une entrée ACL dans un fichier. Vous devez fournir un compte d'utilisateur ou un compte de groupe valide pour exécuter cet exemple.


using System;
using System.IO;
using System.Security.AccessControl;

namespace FileSystemExample
{
    class FileExample
    {
        public static void Main()
        {
            try
            {
                string fileName = "test.xml";

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

                // Add the access control entry to the file.
                AddFileSecurity(fileName, @"DomainName\AccountName",
                    FileSystemRights.ReadData, AccessControlType.Allow);

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

                // Remove the access control entry from the file.
                RemoveFileSecurity(fileName, @"DomainName\AccountName",
                    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)
        {


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

            // Add the FileSystemAccessRule to the security settings.
            fSecurity.AddAccessRule(new FileSystemAccessRule(account,
                rights, controlType));

            // Set the new access settings.
            File.SetAccessControl(fileName, 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)
        {

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

            // Remove the FileSystemAccessRule from the security settings.
            fSecurity.RemoveAccessRule(new FileSystemAccessRule(account,
                rights, controlType));

            // Set the new access settings.
            File.SetAccessControl(fileName, fSecurity);

        }
    }
}


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft