2010-09-22 14 views
5

Tôi hiện cứng mã hóa vai trò ủy quyền trong bộ lọc trong các ứng dụng MVC của tôi như vậy:động lập bản đồ vai trò để điều khiển trong ASP.Net MVC

[Authorize(Roles = "Administrator,Manager")] 

Tôi muốn để cuối cùng có một cách để lập bản đồ vai trò cho mỗi bộ điều khiển, để quản trị viên trang web có thể xử lý việc gán vai trò nào có thể thực hiện từng bộ hành động.

string roles = DoSomethingToGetAllowableRoles(controllerName); 

[Authorize(Roles = roles)] 

Tôi tưởng tượng rằng tôi cần phải có bảng cơ sở dữ liệu bằng cách nào đó giữ danh sách của mỗi bộ điều khiển và sau đó một bảng khác ánh xạ bộ điều khiển cho vai trò. Những gì tôi muốn là một trang mà tôi có thể liệt kê ra mỗi bộ điều khiển và sau đó có một bộ hộp kiểm liệt kê từng vai trò áp dụng cho bộ điều khiển đó.

Bất kỳ ai có ví dụ hoặc có thể dẫn tôi theo hướng sẽ thực hiện việc này?

Trả lời

8

Bạn sẽ cần phải viết bộ lọc ủy quyền của riêng mình (có thể bằng cách mở rộng bộ lọc được tích hợp sẵn).

Lý do cho điều này là bạn không thể chỉ định tham số thuộc tính động như vậy.

Bạn sẽ không cần phải gây rối với mã nguồn MVC - bạn chỉ cần tạo một lớp kế thừa từ System.Web.Mvc.AuthrorizeAttribute, ghi đè AuthorizeCore và sau đó sử dụng thuộc tính của bạn thay cho mặc định:

public class CustomAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     // Put your custom logic here, returning true for success and false for failure, 
     // or return base.AuthorizeCore(httpContext) to defer to the base implementation 
    } 
} 
+0

Tôi cho rằng đó là một phần của những gì tôi đang cố gắng tìm hiểu - nếu có thể mà không gây rối với mã nguồn MVC ... cảm ơn! – Ben

+0

Nó không khó như bạn nghĩ. Tôi đã đưa ra một ví dụ. –