Sto scrivendo una piccola utility in C# per assicurarmi che una cartella specificata e tutti i suoi contenuti abbiano i diritti di accesso appropriati (voglio dare al gruppo Authenticated Users
pieno accesso). Il seguente codice sembra funzionare correttamente per l'aggiornamento ACL nella cartella principale del livello (Access Control List):Come verificare se "include autorizzazioni ereditabili" è deselezionato per un file o una cartella?
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);
Ho notato, tuttavia, che questa nuova regola di accesso non si propaga alle sottocartelle che hanno il "Includi autorizzazioni ereditabili ... "opzione deselezionata nelle relative proprietà di sicurezza. Questo ha senso solo Quindi, quello che voglio fare è riattivare l'ereditarietà delle autorizzazioni di sicurezza per tali sottocartelle.
Il mio scavo ha scoperto il metodo ObjectSecurity.SetAccessRuleProtection
che dovrebbe essere la metà di quello che mi serve. Tuttavia, sembra sciatto utilizzare solo il metodo sopra per gli oggetti che già ereditano il DACL dei loro genitori. Pertanto, voglio determinare quali oggetti hanno disattivato l'ereditarietà delle autorizzazioni, ma non riesco a trovare il metodo o la proprietà corrispondente che restituisce queste informazioni. Ce n'è uno? Mi sto perdendo qualcosa qui?
Perché è importante se una cartella padre già lo ha stabilito? L'impostazione di nuovo non dovrebbe causare alcun dolore. –
@ M.Babcock - Per motivi pratici, sembra inutile e inefficiente forzare un aggiornamento a un file o una cartella che non necessita di aggiornamento. Nel mio caso specifico, ci sono solo alcune sottocartelle che * non * ereditano i diritti di accesso, ma ci sono centinaia o addirittura migliaia di file all'interno delle stesse cartelle che * fanno *. Per motivi di prestazioni, preferirei piuttosto aggiornare una manciata di questi oggetti rispetto a tutti loro. – Jeremy
Sebbene non sia un duplicato, è l'inverso di http://stackoverflow.com/questions/6574196/programatically-removing-include-inheritable-permissions-from-this-objects-par – emd