C#文件夹权限操作整理

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 2000 中的内部进程将引用帐户的 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);
               }
            }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值