英語で読む

次の方法で共有


方法 : アクセス制御リスト エントリを追加または削除する

ファイルまたはディレクトリにアクセス制御リスト (ACL) エントリを追加または削除するには、ファイルまたはディレクトリから FileSecurity または DirectorySecurity オブジェクトを取得します。 オブジェクトを変更し、ファイルまたはディレクトリに戻します。

ファイルから

  1. FileSystemAclExtensions.GetAccessControl(FileInfo) (.NET Framework アプリの場合は FileInfo.GetAccessControl) メソッドを呼び出して、ファイルの現在の ACL エントリを含む FileSecurity オブジェクトを取得します。

  2. 手順 1 で取得した FileSecurity オブジェクトに ACL エントリを追加または削除します。

  3. 変更を適用するには、FileSecurity オブジェクトを FileSystemAclExtensions.SetAccessControl(FileInfo, FileSecurity) (.NET Framework アプリの場合は FileInfo.SetAccessControl) メソッドに渡します。

ディレクトリから

  1. FileSystemAclExtensions.GetAccessControl(DirectoryInfo) (.NET Framework アプリの場合は DirectoryInfo.GetAccessControl) メソッドを呼び出して、ディレクトリの現在の ACL エントリを含む DirectorySecurity オブジェクトを取得します。

  2. 手順 1 で取得した DirectorySecurity オブジェクトに ACL エントリを追加または削除します。

  3. 変更を適用するには、DirectorySecurity オブジェクトを FileSystemAclExtensions.SetAccessControl(DirectoryInfo, DirectorySecurity) (.NET Framework アプリの場合は DirectoryInfo.SetAccessControl) メソッドに渡します。

この例を実行するには、有効なユーザーまたはグループ アカウントを指定する必要があります。 この例は FileInfo オブジェクトを使用します。 DirectoryInfo クラスにも同じ手順を使用します。

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

    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)
        {
            FileInfo fileInfo = new(fileName);
            FileSecurity fSecurity = fileInfo.GetAccessControl();

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

            // Set the new access settings.
            fileInfo.SetAccessControl(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)
        {
            FileInfo fileInfo = new(fileName);
            FileSecurity fSecurity = fileInfo.GetAccessControl();

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

            // Set the new access settings.
            fileInfo.SetAccessControl(fSecurity);
        }
}