引入名稱空間:
using System.Security.AccessControl;
using System.IO;
設定 NTFS 許可權:
DirectoryInfo di = new DirectoryInfo(path);
DirectorySecurity ds = di.GetAccessControl();
FileSystemAccessRule newAccessRule = new FileSystemAccessRule(identity, rights,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow);
ds.AddAccessRule(newAccessRule);
di.SetAccessControl(ds);
參數
- path 要設定 NTFS 許可權的檔案夾。
- identity 使用者名稱。
- rights FileSystemRights 對象,值為 FileSystemRights.Read、FileSystemRights.Write、FileSystemRights.FullControl 等,或者用“|”將多個許可權合起來。
InheritanceFlags 指定哪些接受許可權繼承
- InheritanceFlags.ContainerInherit 下級檔案夾要繼承許可權。
- InheritanceFlags.None 下級檔案夾、檔案都不繼承許可權。
- InheritanceFlags.ObjectInherit 下級檔案要繼承許可權。
上面提到“檔案夾”、“檔案”,更準確的說法應該是“容器”、“葉對象”,因為它不僅僅用於檔案夾、檔案,還可能用於其他地方,比如註冊表許可權。
PropagationFlags 如何傳播許可權
- PropagationFlags.InheritOnly 不對 path 作設定,只是傳播到下級。
- PropagationFlags.None 不作設定,即既對 path 作設定,也傳播到下級。
- PropagationFlags.NoPropagateInherit 只是對 path 作設定,不傳播到下級。
PropagationFlags 只是在 InheritanceFlags 不為 None 時才有意義。也就是說 InheritanceFlags 指定了哪類對象可接受許可權繼承(傳播),而 PropagationFlags 指明了如何傳播這些許可權。
說明
要給檔案給檔案夾設定許可權,首先運行 C# 的帳戶要具有足夠的許可權。