using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.AccessControl; using System.Text; using System.Threading.Tasks; namespace CvNetVideo.Play { /// <summary> /// 目录权限辅助类 /// </summary> public class DictionaryHelper { /// <summary> /// 需要足够的权限才能执行此操作:Get filepath rights /// </summary> /// <param name="path"></param> /// <returns></returns> public static List<FileSystemRights> GetRights(string path) { List<FileSystemRights> ret = new List<FileSystemRights>(); DirectorySecurity dirSec = Directory.GetAccessControl(path, AccessControlSections.All); AuthorizationRuleCollection rules = dirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)); foreach (FileSystemAccessRule rule in rules) { ret.Add(rule.FileSystemRights); } return ret; } //public static void AccessExample() { // try // { // string DirectoryName = "TestDirectory"; // Console.WriteLine("Adding access control entry for " + DirectoryName); // // Add the access control entry to the directory. // AddDirectorySecurity(DirectoryName, @"MYDOMAINMyAccount", FileSystemRights.ReadData, AccessControlType.Allow); // Console.WriteLine("Removing access control entry from " + DirectoryName); // // Remove the access control entry from the directory. // RemoveDirectorySecurity(DirectoryName, @"MYDOMAINMyAccount", FileSystemRights.ReadData, AccessControlType.Allow); // Console.WriteLine("Done."); // } // catch (Exception e) // { // Console.WriteLine(e); // } // Console.ReadLine(); //} // Adds an ACL entry on the specified directory for the specified account. public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType) { // Create a new DirectoryInfo object. DirectoryInfo dInfo = new DirectoryInfo(FileName); // Get a DirectorySecurity object that represents the // current security settings. DirectorySecurity dSecurity = dInfo.GetAccessControl(); // Add the FileSystemAccessRule to the security settings. dSecurity.AddAccessRule(new FileSystemAccessRule(Account, Rights, ControlType)); // Set the new access settings. dInfo.SetAccessControl(dSecurity); } // Removes an ACL entry on the specified directory for the specified account. public static void RemoveDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType) { // Create a new DirectoryInfo object. DirectoryInfo dInfo = new DirectoryInfo(FileName); // Get a DirectorySecurity object that represents the // current security settings. DirectorySecurity dSecurity = dInfo.GetAccessControl(); // Add the FileSystemAccessRule to the security settings. dSecurity.RemoveAccessRule(new FileSystemAccessRule(Account, Rights, ControlType)); // Set the new access settings. dInfo.SetAccessControl(dSecurity); } } }