2009-01-19 31 views
5

Tôi đang cố gắng progamrtaiclly cho phép ghi quyền truy cập vào tài khoản ASPNET trên một thư mục. Tôi đang sử dụng đoạn mã sau để làm điều này: (Xin lưu ý rằng tôi muốn cho ASPNET "ghi cho phép truy cập" được truyền đến các đối tượng trẻ em cũng như:Đặt quyền truy cập cho thư mục - nhận ngoại lệ "Không thể đặt cờ"

static void Main(string[] args) 
      { 


       FileSecurity fileSecurity; 

       fileSecurity = new FileSecurity(); 

       fileSecurity.SetAccessRuleProtection(true, false); 

       fileSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET",FileSystemRights.Write,InheritanceFlags.ObjectInherit|InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow));         

       File.SetAccessControl("C:\\TestDir1", fileSecurity); 
      } 

Mã này được dẫn đến ngoại lệ: " không cờ có thể được thiết lập \ r \ nParameter tên:. inheritanceFlags"

Điều gì có thể sai

Trả lời

9

Got giải pháp, rõ ràng là tôi sẽ phải làm điều đó theo cách này:?

DirectoryInfo dirInfo = new DirectoryInfo("C:\\TestDir2"); 
      DirectorySecurity dirSecurity = dirInfo.GetAccessControl(); 

      dirSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET", FileSystemRights.Write|FileSystemRights.DeleteSubdirectoriesAndFiles, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow)); 


      dirInfo.SetAccessControl(dirSecurity); 
+0

Dường như cài đặt cờ kế thừa không hoạt động trừ khi đối tượng FileSecurity hiện có được sử dụng? Điều này không làm cho thử nghiệm dễ dàng hơn. – wesm

2

Như bạn đã chỉ ra, vấn đề ban đầu là bạn đang sử dụng lớp FileSecurity (áp dụng cho các tệp, không phải thư mục) và cố gắng đặt ACL cho thư mục, nhưng điều này cũng có thể xảy ra vì một trong các lý do sau:

  1. Khi thiết lập một quy tắc cho một thư mục , bạn chỉ định InheritanceFlags.None như cờ thừa kế, nhưng cung cấp bất kỳ giá trị khác hơn PropagationFlags.None cho việc tuyên truyền cờ (bạn không thể tuyên truyền kế thừa rằng không tồn tại) .
  2. Khi thiết lập một quy tắc cho một tập tin , chỉ định bất kỳ giá trị khác hơn InheritanceFlags.NonePropragationFlags.None cho thông số tương ứng (file không container, và do đó thừa kế không thể được chỉ định).

Bạn có thể xem các kiểm tra liên quan mà Khuôn khổ .NET thực hiện trong source for the CheckFlags method.

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