ディレクトリにアクセス権を追加する - 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