C#給用戶設(shè)置文件訪問(wèn)權(quán)限,臨時(shí)訪問(wèn)并恢復(fù)之前的權(quán)限
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
using System.Security.AccessControl; using System.Security.Principal; public class Program { public static void Main() { //能做做參考 List<FileSystemAccessRule> systemAccessRules = new List<FileSystemAccessRule>(); // 暫存以前的權(quán)限 string path = "C:\\Test"; AddDirectorySecurity(path, systemAccessRules); DirectoryInfo dInfow = new DirectoryInfo("C:\\Test"); var files = dInfow.GetFiles(); // 測(cè)試能否讀取文件 DirectorySecurity dSecurity = dInfow.GetAccessControl(); // 恢復(fù)文件之前的權(quán)限 foreach (var f in systemAccessRules) { dSecurity.RemoveAccessRuleAll(new FileSystemAccessRule(f.IdentityReference.Value, FileSystemRights.FullControl, AccessControlType.Allow)); dSecurity.ModifyAccessRule(AccessControlModification.Add, f, out var ok); } dInfow.SetAccessControl(dSecurity); Console.ReadKey(); } // 設(shè)置權(quán)限 static void AddDirectorySecurity(string FileName, List<FileSystemAccessRule> files) { // 獲取目錄信息 DirectoryInfo dInfo = new DirectoryInfo(FileName); // 獲取目錄控制信息 DirectorySecurity dSecurity = dInfo.GetAccessControl(); // 獲取目錄相關(guān)權(quán)限 var c = dSecurity.GetAccessRules(true, true, typeof(NTAccount)).OfType<FileSystemAccessRule>(); foreach (var g in c) { files.Add(g); // 不知道為啥直接修改不行 // g.IdentityReference.Value 就是用戶賬號(hào) dSecurity.RemoveAccessRuleAll(new FileSystemAccessRule(g.IdentityReference.Value, FileSystemRights.FullControl, AccessControlType.Deny)); dSecurity.ModifyAccessRule(AccessControlModification.Add, new FileSystemAccessRule(g.IdentityReference.Value, FileSystemRights.Read, AccessControlType.Allow), out var ok); Console.WriteLine(ok); } // 設(shè)置權(quán)限 dInfo.SetAccessControl(dSecurity); } } 該文章在 2023/9/10 14:59:42 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |