2012-07-18 28 views
18

Tôi đang tạo ứng dụng MVC có biểu mẫu auth. Tôi đang xác thực đối với thư mục hoạt động và do đó đã tạo ra một RoleProvider tùy chỉnh. Ứng dụng của tôi là chỉ quan tâm đến một nhóm nhỏ các vai trò mà cho đến bây giờ tôi đã được xác định trong phần appSettings của web.config của tôi:Chỉ định vai trò trong web.config của ứng dụng asp.net MVC

<appSettings> 
    <add key="DirectorRole" value="Domain\Directors" /> 
    <add key="ManagementRole" value="Domain\Managers" /> 
    ... 
</appSettings> 

Tuy nhiên tôi đã chạy vào một vài vấn đề với cách tiếp cận này:

  1. Tôi không thể tham chiếu các cài đặt này trong chú thích dữ liệu đối tượng của tôi: [Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])] vì nó không biên dịch vì vậy tôi phải chỉ định lại tên nhóm: [Authorize(Roles = "Domain\\Directors")].
  2. Trong web.config của tôi, tôi muốn chỉ định groupsToUse cho nhà cung cấp vai trò của tôi và chỉ tham chiếu danh sách có sẵn, thay vì duy trì hai danh sách riêng biệt của cùng một tập hợp vai trò.

Dường như phải có cách tốt hơn/có thể tái sử dụng để xác định vai trò trong web.config, ai đó có thể chỉ cho tôi đúng hướng không?

Trả lời

26

Tôi muốn sử dụng thuộc tính ủy quyền tùy chỉnh. Giống như cái này.

public class MyAuthorizeAttribute : AuthorizeAttribute { 

    public MyAuthorizeAttribute(params string[] roleKeys) { 
     List<string> roles = new List<string>(roleKeys.Length); 

     //foreach(var roleKey in roleKeys) { 
      //roles.Add(ConfigurationManager.AppSettings["DirectorRole"]); 
     //} 
     var allRoles = (NameValueCollection)ConfigurationManager.GetSection("roles"); 
     foreach(var roleKey in roleKeys) { 
      roles.Add(allRoles[roleKey]); 
     } 

     this.Roles = string.Join(",", roles); 
    } 
} 

Trong điều khiển của bạn, sử dụng:

[MyAuthorize("DirectorRole")] 

Trong web.config của bạn

<configSections> 
    <section 
     name="roles" 
     type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </configSections> 

    <roles> 
    <add key="DirectorRole" value="Domain\Directors" /> 
    <add key="ManagementRole" value="Domain\Managers" /> 
    </roles> 

Tôi hy vọng điều này sẽ giải quyết vấn đề đầu tiên bạn tốt. Và twiking một chút sẽ giải quyết thứ hai quá.

+0

Có một vị trí cụ thể trong web.config để đặt danh sách vai trò thay vì chỉ trong phần không? – James

+0

@james: Tôi không chắc chắn nếu có bất kỳ địa điểm cụ thể nào. Nhưng bạn chắc chắn có thể làm cho một căn phòng cho vai trò của bạn. Hãy xem [tại đây] (http://stackoverflow.com/a/338310/887149) – Mohayemin

+0

@james: Tôi đã cập nhật câu trả lời – Mohayemin

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