C# folder permission operation tool class

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>
    /// Directory permission helper class
    /// </summary>
    public class DictionaryHelper
    {
        /// <summary>
        /// Sufficient rights are required to perform this operation: 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, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

        //        Console.WriteLine("Removing access control entry from " + DirectoryName);

        //        // Remove the access control entry from the directory.
        //        RemoveDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", 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);

        }
    }
}

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326055701&siteId=291194637