Piszę małe narzędzie w języku C#, aby upewnić się, że określony folder i cała jego zawartość mają odpowiednie prawa dostępu (chcę dać grupie pełny dostęp do grupy Authenticated Users
). Poniższy kod wydaje się działać poprawnie za aktualizowanie ACL folderu najwyższego poziomu użytkownika (Access Control List):Jak sprawdzić, czy "włącz dziedziczne uprawnienia" nie jest zaznaczone dla pliku lub folderu?
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);
Zauważyłam jednak, że ta nowa zasada dostępu nie rozprzestrzeniać do podfolderów, które mają „Dołącz dziedziczne uprawnienia ... "Opcja niezaznaczona we właściwościach zabezpieczeń. To ma sens. Tak, więc chcę przywrócić dziedziczenie uprawnień bezpieczeństwa dla wszystkich takich podfolderów.
Moje kopanie odkryło metodę ObjectSecurity.SetAccessRuleProtection
, która powinna być połową tego, czego potrzebuję. Wydaje się jednak, że niechlujnie stosuje się powyższą metodę do obiektów, które już dziedziczą DACL swoich rodziców. Tak więc chcę ustalić, które obiekty mają wyłączone uprawnienia dziedziczenia, ale nie mogę znaleźć odpowiedniej metody lub właściwości, która zwraca tę informację. Czy jest jeden? Czy coś mi umyka?
Dlaczego to ma znaczenie, czy folder nadrzędny ma już to ustawić? Ponowne ustawienie go nie powinno wywoływać żałoby. –
@ M.Babcock - Z powodów praktycznych wydaje się marnotrawstwem i nieefektywnością wymuszenie aktualizacji pliku lub folderu, który nie wymaga aktualizacji. W moim konkretnym przypadku istnieje tylko kilka podfolderów, które * nie * dziedziczą praw dostępu, ale istnieją setki, a nawet tysiące plików w tych samych folderach, które * robią *. Ze względów wydajności raczej chciałbym zaktualizować garść tych obiektów niż wszystkie. – Jeremy
Chociaż nie jest to duplikat, jest to odwrotnością http://stackoverflow.com/questions/6574196/programatically-removing-include-heritable-pestications-from-thisobjects-par – emd