Tôi đang viết một tiện ích nhỏ trong C# để đảm bảo một thư mục được chỉ định và tất cả nội dung của nó có quyền truy cập thích hợp (tôi muốn cấp cho toàn quyền truy cập nhóm Authenticated Users
). Các mã sau đây dường như làm việc đúng cách để cập nhật ACL mức thư mục hàng đầu (Access Control List):Cách xem liệu "bao gồm các quyền thừa kế" có được bỏ chọn cho một tệp hoặc thư mục không?
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);
tôi đã nhận thấy, tuy nhiên, quy tắc truy cập mới này không tuyên truyền để các thư mục con có "Bao gồm quyền truy cập được phép… "tùy chọn không được chọn trong thuộc tính bảo mật của chúng. Điều đó chỉ có ý nghĩa. Vì vậy, những gì tôi muốn làm là chuyển quyền thừa kế quyền bảo mật trở lại cho bất kỳ thư mục con như vậy.
Việc đào của tôi đã phát hiện ra phương pháp ObjectSecurity.SetAccessRuleProtection
cần phải bằng một nửa những gì tôi cần. Tuy nhiên, nó có vẻ cẩu thả để chỉ sử dụng một cách mù quáng phương pháp trên trên các đối tượng đã thừa hưởng DACL của cha mẹ của họ. Vì vậy, tôi muốn xác định các đối tượng có quyền thừa kế quyền của họ bị tắt, nhưng tôi dường như không thể tìm thấy phương thức hoặc thuộc tính tương ứng trả về thông tin này. Có cái nào không? Am i thiếu cái gì ở đây?
Tại sao nó quan trọng nếu một thư mục mẹ đã có nó thiết lập? Đặt lại lần nữa sẽ không gây ra bất kỳ đau buồn nào. –
@ M.Babcock - Vì lý do thực tế, có vẻ như lãng phí và không hiệu quả để buộc cập nhật tệp hoặc thư mục không cần cập nhật. Trong trường hợp cụ thể của tôi, chỉ có một vài thư mục con * không * kế thừa quyền truy cập, nhưng có hàng trăm hoặc thậm chí hàng nghìn tệp trong cùng một thư mục * làm *. Vì lý do hiệu suất, tôi sẽ cập nhật một số ít các đối tượng này hơn tất cả chúng. – Jeremy
Mặc dù không phải là bản sao, nó là nghịch đảo của http://stackoverflow.com/questions/6574196/programatically-removing-include-inheritable-permissions-from-this-objects-par – emd