C#-文件安全性ACL访问

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = AppDomain.CurrentDomain.BaseDirectory + "test.txt";
            string dir = AppDomain.CurrentDomain.BaseDirectory;
            try
            {
                Console.WriteLine("File ACL");
                using (FileStream fs = new FileStream(fileName, FileMode.Open,FileAccess.Read))
                {
                    FileSecurity fsec = fs.GetAccessControl();
                    foreach(FileSystemAccessRule rule in fsec.GetAccessRules(true,true,typeof(NTAccount)))
                    {
                        Console.WriteLine("{0} {1} {2} acess for {3}", Path.GetFileName(fileName),
                            rule.AccessControlType == AccessControlType.Allow ? "Provides" : "denies",
                            rule.FileSystemRights, rule.IdentityReference);
                    }

                    FileSystemAccessRule newRule = new FileSystemAccessRule(new System.Security.Principal.NTAccount(@"BUILTIN\Users"), FileSystemRights.FullControl, AccessControlType.Allow);
                    fsec.AddAccessRule(newRule);
                    File.SetAccessControl(fileName, fsec);

                    Console.WriteLine();
                    Console.WriteLine("Add ACL");
                    foreach (FileSystemAccessRule rule in fsec.GetAccessRules(true, true, typeof(NTAccount)))
                    {
                        Console.WriteLine("{0} {1} {2} acess for {3}", Path.GetFileName(fileName),
                            rule.AccessControlType == AccessControlType.Allow ? "Provides" : "denies",
                            rule.FileSystemRights, rule.IdentityReference);
                    }
                }
                Console.WriteLine("Directory ACL");
                DirectoryInfo di = new DirectoryInfo(dir);
                DirectorySecurity dsec = di.GetAccessControl();
                foreach (FileSystemAccessRule rule in dsec.GetAccessRules(true,true,typeof(NTAccount)))
                {
                    Console.WriteLine("{0} {1} {2} acess for {3}", dir,
                           rule.AccessControlType == AccessControlType.Allow ? "Provides" : "denies",
                           rule.FileSystemRights, rule.IdentityReference);
                }
                
                Console.Read();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.Read();
            }
        }
    }
}
 

猜你喜欢

转载自blog.csdn.net/dxm809/article/details/85691106