コード例 #1
0
 private static List <string> GetRuleLine(AccessRule rule)
 {
     return(new List <string>()
     {
         rule.Dir.DirPath,
         rule.Account.DisplayName,
         (rule.Type == AccessControlType.Deny ? "Deny " : "") + rule.SimpleRights
     });
 }
コード例 #2
0
        private static void AddRule(List <AccessRule> accessRules, AccessRule rule)
        {
            if (IsExcluded(rule.Account))
            {
                return;
            }
            var existing = accessRules.Find(r => r.Account.UserName == rule.Account.UserName);

            if (existing is null)
            {
                accessRules.Add(rule);
            }
            else
            {
                existing.Rights |= rule.Rights;
            }
        }
コード例 #3
0
        public static List <AccessRule> GetAccessRules(DirectoryPermissions dir, bool recursive = true)
        {
            List <AccessRule> accessRules = new List <AccessRule>();
            var acCollection = new DirectoryInfo(dir.DirPath).GetAccessControl().GetAccessRules(
                true, true, typeof(System.Security.Principal.NTAccount));

            foreach (FileSystemAccessRule ace in acCollection)
            {
                var rule = new AccessRule(dir, ace);
                if (!rule.IsExpandable)
                {
                    AddRule(accessRules, rule);
                    continue;
                }
                foreach (var subRule in rule.Expand())
                {
                    AddRule(accessRules, subRule);
                }
            }
            return(accessRules);
        }