using System.Security.AccessControl;
using System.IO;
using System.Security.Principal;

取得目录的访问控制和审核安全(ACL)

DirectorySecurity fileAcl = Directory.GetAccessControl(filePath);

文件夹权限继承控制

fileAcl.SetAccessRuleProtection(true, true);//取消权限继承,且保留继承的访问规则
fileAcl.SetAccessRuleProtection(true, true);//取消权限继承,且移除继承的访问规则
fileAcl.SetAccessRuleProtection(false, true);//允许权限继承,且忽略第二个参数

访问规则访问控制项创建

FileSystemAccessRule everyoneRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow);
FileSystemAccessRule everyoneRule1 = new FileSystemAccessRule("Everyone", FileSystemRights.Modify, AccessControlType.Allow);
            //"Everyone"用户账户名称
            //FileSystemRights.FullControl 访问规则
            //AccessControlType.Allow 允许访问受保护对象,AccessControlType.Deny拒绝访问受保护对象
SID也就是安全标识符(Security Identifiers),是标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,
将给网络上的每一个帐户发布一个唯一的 SID。Windows 中的内部进程将引用帐户的 SID 而不是帐户的用户或组名。
如果创建帐户,再删除帐户,然后使用相同的用户名创建另一个帐户,则新帐户将不具有授权给前一个帐户的权力或权限,
原因是该帐户具有不同的 SID 号。安全标识符也被称为安全 ID 或 SID。

修改访问控制列表(ACL)

            bool result = false;
//将指定的授权规则添加到访问控制列表 (ACL)。
fileAcl.ModifyAccessRule(AccessControlModification.Add, everyoneRule,out result); //从 ACL 移除所含安全性标识符 (SID) 和访问掩码与指定授权规则一样的授权规则。
fileAcl.ModifyAccessRule(AccessControlModification.Remove, everyoneRule, out result);
//从 ACL 移除所含 SID 与指定授权规则一样的授权规则。
fileAcl.ModifyAccessRule(AccessControlModification.RemoveAll, everyoneRule, out result);
//从 ACL 移除与指定的授权规则完全匹配的授权规则。
fileAcl.ModifyAccessRule(AccessControlModification.RemoveSpecific, everyoneRule, out result); //从 ACL 移除所含 SID 与指定授权规则一样的授权规则,然后将指定的授权规则添加到 ACL。
fileAcl.ModifyAccessRule(AccessControlModification.Reset, everyoneRule, out result);
//从 ACL 移除所有授权规则,然后将指定的授权规则添加到 ACL。
fileAcl.ModifyAccessRule(AccessControlModification.Set, everyoneRule, out result); //权限追加
fileAcl.AddAccessRule(everyoneRule);
//权限删除
fileAcl.RemoveAccessRule(everyoneRule);
//从当前文件或目录移除所有匹配的允许或拒绝访问控制列表 (ACL) 权限。
fileAcl.RemoveAccessRuleAll(everyoneRule);
//从当前文件或目录移除指定用户的所有访问控制列表 (ACL) 权限。
fileAcl.RemoveAccessRuleSpecific(everyoneRule);
//从当前文件或目录移除单个匹配的允许或拒绝访问控制列表 (ACL) 权限。

遍历ACL中的ACE

            AuthorizationRuleCollection rules = fileAcl.GetAccessRules(true, true, typeof(NTAccount));
// AuthorizationRule Rule = rules[0];
foreach (FileSystemAccessRule rule in rules)
{
if(rule.IdentityReference.Value.CompareTo("Users")==0)
{
fileAcl.RemoveAccessRule(rule);
}
}

最新文章

  1. Abp公共连接和事务管理方法
  2. python: 模块发布
  3. 替换文件最后一行中的所有e 为 E
  4. POJ1780 Code(欧拉路径)
  5. Java实现FTP文件上传与下载
  6. linux下的deb/rpm文件的说明和安装方法
  7. 用Java实现向Cassandra数据库中插入和查询数据
  8. 单点登录CAS使用记(七):关于服务器超时以及客户端超时的分析
  9. ZOJ 2760 How Many Shortest Path
  10. CI(CodeIgniter)学习第一讲
  11. Matlab基础知识
  12. opencv之haar特征+AdaBoos分类器算法流程(二)
  13. Eclipse标准版安装J2EE插件
  14. 43. leetcode 459. Repeated Substring Pattern
  15. log4j的基本使用和参数设定
  16. Spring Cloud-微服务架构集大成者
  17. csrf jsonp
  18. base64使用
  19. 设计模式-结构型模式, mvc 模型视图控制器模式(8)
  20. tf运作方式之共享变量

热门文章

  1. noip第22课资料
  2. react native (1) 新建页面并跳转
  3. WebPackBrows
  4. WPF 开发备忘录
  5. TDD:什么是桩(stub)和模拟(mock)?
  6. VSCode插件开发全攻略(四)命令、菜单、快捷键
  7. 64位 windows10,MYSQL8.0.13重置密码(忘记密码或者无法登录)
  8. Java的BIO,NIO和AIO的区别于演进
  9. Android UID 机制
  10. Javascript高级编程学习笔记(40)—— DOM(6)CDATASection、DocumentType