2009-01-09 47 views
16

Tôi đang viết một ứng dụng để quản lý quyền truy cập của người dùng vào các tệp. Các phiên bản ngắn của một câu chuyện rất dài là tôi phải sử dụng thư mục và tập tin priveleges để làm điều đó. Không có hệ thống quản lý tài liệu nào cho CEO giá rẻ của chúng tôi ...C# Tệp/Thư mục Quyền

Dù sao ... Tôi có mọi thứ hoạt động ngoại trừ trường hợp người dùng có thể xem tệp nào nằm trong thư mục nhưng thực sự không thấy nội dung của tệp. (Có thể có dữ liệu nhân sự nhạy cảm trong các tệp.)

Tôi đã thử FileSystemRights.ListDirectory, nhưng dường như (phân phát tài liệu MS) cũng đã đặt ReadData thành true. Tôi tắt ReadData (khả năng đọc các tập tin) và tôi đột nhiên không có quyền truy cập vào thư mục nữa. Cả hai xuất hiện liên kết.

Bất kỳ ý tưởng nào về (các) giấy phép cần thiết để đạt được điều này?

mã hiện tại của tôi là:

SetSecurity(pth, usr, FileSystemRights.ListDirectory, AccessControlType.Allow); 

... 

public void SetSecurity(string dirName, string account, 
    FileSystemRights rights, AccessControlType controlType) 
{ 
    // Get a FileSecurity object that represents the 
    // current security settings. 
    DirectorySecurity dSecurity = Directory.GetAccessControl(dirName); 

    dSecurity.AddAccessRule(new FileSystemAccessRule(account, rights, controlType)); 

    // Set the new access settings. 
    Directory.SetAccessControl(dirName, dSecurity); 
} 

Cảm ơn.

--Jerry

Trả lời

7

Các FileSystemRights enum maps cả readData và ListDirectory với giá trị 1, vì vậy hai là 100% tương đương như xa như .NET là có liên quan.

Bạn đã thử Traverse như trái ngược với ListDirectory chưa?

Chỉnh sửa: Dựa trên this bài viết KB có vẻ như Windows XP coi chúng giống nhau, chỉ áp dụng cho tệp và chỉ áp dụng cho các thư mục.

Chỉnh sửa 2: Miễn là bạn đặt quy tắc truy cập ReadData/ListDirectory thành NOT bởi các đối tượng con, bạn có thể áp dụng nó vào thư mục mà không áp dụng nó vào các tệp trong thư mục. Lớp FileSystemAccessRule hỗ trợ thay đổi cờ kế thừa.

3

Các tệp có thể kế thừa các thuộc tính bảo mật của cha mẹ.

Bạn có thể thử gọi DirectorySecurity.SetAccessRuleProtection(true, false) để ngăn các tệp kế thừa, trước khi gọi Directory.SetAccessControl();

+0

Có. Các tệp ARE được kế thừa từ thư mục. Tuy nhiên, một "CEO khác từ chối mua một giải pháp quản lý tài liệu thực sự" mà chúng tôi phải thiết lập. – Jerry

+0

Sau khi thử nghiệm không thừa kế trên một thư mục cụ thể, bạn đã đúng. Bạn có thể kích hoạt thư mục, sau đó vô hiệu hóa các tập tin chính nó và nó hoạt động như mong muốn ... nhưng vì lý do khác, đây không phải là một lựa chọn cho chúng tôi. – Jerry

1

Đúng. Traverse (Tôi cho rằng nó được đặt tên sai) cho phép tôi thực hiện một chương trình trong một thư mục, nhưng KHÔNG xem nội dung của một thư mục. Không chắc chắn lý do tại sao điều này là hữu ích, phải trung thực.

Tôi sắp nói với Giám đốc điều hành rằng nó không thể được thực hiện và xem các tia lửa bay một lần nữa. : P

+2

Có thể bỏ qua các kiểm tra traverse để truy cập tệp O (1) thay vì O (n). Hãy tưởng tượng cố gắng để mở 100 tập tin lồng nhau 12 thư mục sâu. Nếu bạn có thể bỏ qua kiểm tra đi qua, bạn chỉ phải thực hiện 100 lần kiểm tra ACL; nếu không, bạn phải làm 1200 séc. – Gabe

0

Đó là giá trị thừa kế và tuyên truyền không được đặt khi tệp FileSystemAccessRule được khởi tạo.

Các vấn đề liên quan