ディレクトリにアクセス権を追加する - C#

C#でディレクトリにアクセス権を付加する方法を紹介します。

概要

ディレクトリにアクセス権を追加するには、Direcotyクラスの、SetAccessControlメソッドを用います。

コード例 : .NET Core / .NET 5 以降

ボタン(Button4)をクリックすると、"C:\develop\dev"ディレクトリに、"everyone"のフルコントロールアクセス権を付与します。
private void button4_Click(object sender, EventArgs e)
{
  string filePath = @"c:\\develop\dev";

  FileSystemAccessRule rule = new FileSystemAccessRule(
    new NTAccount("everyone"),   
    FileSystemRights.FullControl, 
    InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
    PropagationFlags.None,
    AccessControlType.Allow);

  DirectoryInfo di = new DirectoryInfo(filePath);
  DirectorySecurity security = FileSystemAclExtensions.GetAccessControl(di);
  security.SetAccessRule(rule);
  FileSystemAclExtensions.SetAccessControl(di, security);
}

解説

FileSystemAccessRule オブジェクトを作成し、設定するアクセス権の情報を用意します。
今回は everyone ユーザーにフルコントロール権限を追加するため、FileSystemAccessRuleのコンストラクタの 第一引数に everyone の NTAccount オブジェクト、第二引数に FileSystemRights.FullControl、 第三引数に InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit を与えます。
また、第四引数に PropagationFlags.None 第五引数に AccessControlType.Allow を与えます。

アクセス権の設定は、DirectorySecurity オブジェクトを取得し、SetAccessRuleメソッドを呼び出します。SetAccessRuleメソッドの第一引数に、先に作成した FileSystemAccessRule オブジェクトを与えます。

設定後 SetAccessControlメソッドを呼び出し、ファイルに変更したFileSecurityオブジェクトを適用します。

コード例 : .NET Framework

ボタン(Button3)をクリックすると、"C:\develop\dev"ディレクトリに、"everyone"のフルコントロールアクセス権を付与します。
private void button3_Click(object sender, EventArgs e)
{
  string filePath = @"c:\\develop\dev";

  FileSystemAccessRule rule = new FileSystemAccessRule(
    new NTAccount("everyone"),
    FileSystemRights.FullControl, 
    InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
    PropagationFlags.None,
    AccessControlType.Allow);
      
  DirectorySecurity security = Directory.GetAccessControl(filePath);
  security.SetAccessRule(rule);
  Directory.SetAccessControl(filePath, security);
}

解説

.NET Framework の場合も.NETのコードと同様ですが、DirectorySecurity オブジェクトをファイルパスから直接取得する部分が異なります。
.NET では、DirectoryInfoオブジェクトを作成し、GetAccessControl() メソッドにDirectoryInfoオブジェクトを与えて、DirectorySecurity オブジェクトを 取得する必要がありますが、.NET Frameworkでは、ファイルパスから、DirectorySecurity オブジェクトが取得できます。

実行結果

ディレクトリ作成直後のアクセス権の状態


ボタンクリック後のディレクトリのアクセス権の状態です。everyoneユーザーのアクセス権が追加されフルコントロールの権限が付与されています。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-11-22
改訂日: 2022-11-02
iPentec all rights reserverd.