Я пишу небольшую утилиту на C#, чтобы убедиться, что указанная папка и все ее содержимое имеют соответствующие права доступа (Я хочу предоставить группе Authenticated Users
полный доступ ). Следующий код работает должным образом для обновления ACL папки верхнего уровня (Список управления доступом ):
SecurityIdentifier allUsers = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);
InheritanceFlags iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
FileSystemAccessRule newRule = new FileSystemAccessRule(allUsers,
FileSystemRights.FullControl, iFlags,
PropagationFlags.None, AccessControlType.Allow);
DirectoryInfo info = new DirectoryInfo(folderPath);
DirectorySecurity security = info.GetAccessControl();
security.AddAccessRule(newRule);
info.SetAccessControl(security);
. Однако я заметил, что это новое правило доступа не распространяется на подпапки, у которых есть «Включить наследуемые разрешения…» опция снята в их свойствах безопасности. Только в этом есть смысл. Итак, что я хочу сделать, так это снова включить наследование разрешений безопасности для любых таких подпапок.
Мои раскопки обнаружилиObjectSecurity.SetAccessRuleProtection
метод, который должен составлять половину того, что мне нужно. Однако кажется небрежным просто слепо использовать описанный выше метод для объектов, которые уже наследуют DACL своего родителя. Таким образом, я хочу определить, для каких объектов отключено наследование разрешений, но я не могу найти соответствующий метод или свойство, которое возвращает эту информацию. Есть ли один? Я что-то упустил здесь?