2011-04-08 33 views
14

Tôi cần tạo một ủy quyền tùy chỉnh trong ASP.NET MVC 3. Bên trong ứng dụng, ủy quyền được định nghĩa trong 5 bảng: người dùng, nhóm, nhóm người dùng, quyền, grouprights. Người dùng có thể thuộc về một số nhóm và mỗi nhóm cũng có thể được gán cho một số nhóm. Mỗi hành động điều khiển được gán một RightID.Cho phép người dùng hiện tại chống lại tên điều khiển và hành động trong ASP.NET MVC 3

Ủy quyền được tích hợp không thể chứa thiết lập này, vì vậy tôi đã cố tạo một AuthorizeAttribute được tùy chỉnh. Khi ghi đè AuthorizeCore, tôi nhận ra rằng tôi không có quyền truy cập vào tên bộ điều khiển và tên hành động.

Tôi có thể yêu cầu bộ định tuyến phân tích cú pháp Request.RawUrl bên trong AuthorizeCore để lấy tên bộ điều khiển và hành động không? Hay có cách nào khác để làm những gì tôi muốn?

Trả lời

22
protected override bool AuthorizeCore(HttpContextBase httpContext) 
{ 
    var routeData = httpContext.Request.RequestContext.RouteData; 
    var controller = routeData.GetRequiredString("controller"); 
    var action = routeData.GetRequiredString("action"); 
    ... 
} 
+2

Vì vậy, tôi có quyền truy cập vào bộ điều khiển và tên hành động :) –

1

Bạn có thể đạt được điều này bằng cách sử dụng Bộ lọc hành động nơi bạn có quyền truy cập vào tất cả HttpContex.

public class MyAuthorizeAttribute : ActionFilterAttribute, IAuthorizationFilter 
{ 

    #region Implementation of IAuthorizationFilter 

    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
       // ... implementation 

       // filterContext.Controller is the controller 
       // filterContext.RouteData is all the route data 
+1

Tôi đọc ở đâu đó rằng tôi không nên thực hiện bộ lọc uỷ quyền của riêng tôi vì một số vấn đề với bộ nhớ cache đầu ra. Bạn không chắc đây có phải là vấn đề trong MVC không. 3. –

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