DirectoryInfo.SetAccessControl(DirectorySecurity) Metoda

Definice

Použije položky seznamu řízení přístupu (ACL) popsané objektem DirectorySecurity do adresáře popsaného aktuálním objektem DirectoryInfo.

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

Parametry

directorySecurity
DirectorySecurity

Objekt, který popisuje položku seznamu ACL, která se má použít v adresáři popsaném parametrem path.

Výjimky

Parametr directorySecurity je null.

Soubor nebyl nalezen nebo změněn.

Aktuální proces nemá přístup k otevření souboru.

Příklady

Následující příklad používá GetAccessControl a SetAccessControl metody k přidání a odebrání položky seznamu řízení přístupu (ACL) z adresáře.

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

Poznámky

Seznam řízení přístupu (ACL) popisuje jednotlivce a skupiny, které mají nebo nemají práva ke konkrétním akcím daného souboru nebo adresáře. Další informace naleznete v tématu Postupy: Přidání nebo odebrání položek seznamu řízení přístupu.

Metoda SetAccessControl použije položky seznamu ACL na soubor, který představuje nezahrděný seznam ACL.

Upozornění

Seznam ACL zadaný pro directorySecurity nahradí existující seznam ACL pro adresář. Pokud chcete přidat oprávnění pro nového uživatele, použijte metodu GetAccessControl k získání existujícího seznamu ACL a upravte ho.

Metoda SetAccessControl zachovává pouze DirectorySecurity objekty, které byly změněny po vytvoření objektu. Pokud objekt DirectorySecurity nebyl změněn, nebude zachován v souboru. Proto není možné načíst objekt DirectorySecurity z jednoho souboru a znovu použít stejný objekt na jiný soubor.

Kopírování informací seznamu ACL z jednoho souboru do druhého:

  1. Pomocí metody GetAccessControl načtěte objekt DirectorySecurity ze zdrojového souboru.

  2. Vytvořte nový objekt DirectorySecurity pro cílový soubor.

  3. K načtení informací seznamu ACL použijte metodu GetSecurityDescriptorBinaryForm nebo GetSecurityDescriptorSddlForm objektu zdrojového DirectorySecurity.

  4. Pomocí metody SetSecurityDescriptorBinaryForm nebo SetSecurityDescriptorSddlForm zkopírujte informace získané v kroku 3 do cílového objektu DirectorySecurity.

  5. Pomocí metody SetAccessControl nastavte cílový DirectorySecurity objekt na cílový soubor.

Platí pro

Produkt Verze
.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