2012-04-26 29 views
6

Tôi đã có giao diện người dùng với Jquery thực hiện cuộc gọi tới MVC bằng cách sử dụng yêu cầu Ajax.Thuộc tính ủy quyền tùy chỉnh MVC để xác thực Yêu cầu

Tôi muốn xác thực từng yêu cầu đối với userProfile (lớp tùy chỉnh chứa số tài khoản, ID, v.v ...).

Có ai vui lòng đề xuất liệu có thể tạo Thuộc tính ủy quyền tùy chỉnh để xác thực rằng cả yêu cầu và cấu hình người dùng giống nhau không?

Sau đó tôi muốn làm một cái gì đó như dưới đây:

[AuthorizeUser] 
public ActionResult GetMyConsumption(string accountNumber) 
{ 
    ..... 
    return View(); 
} 
+0

Nếu bạn sẵn sàng để phân tích các dữ liệu ra khỏi các hình thức yêu cầu/querystring và xác nhận chúng sau đó nó có thể là có thể. Bạn sẽ có toàn quyền truy cập vào httpContext trong thuộc tính ủy quyền tùy chỉnh của bạn. Bạn sẽ phải giả định rằng một biến "accountNumber" phải tồn tại trong Biểu mẫu nếu một POST hoặc QueryString nếu một GET. Ràng buộc tham số (ánh xạ dữ liệu trong yêu cầu đến các tham số trong Hành động của bạn) sẽ xảy ra xung quanh phương thức OnActionExecuting được cấp phép sau. –

+0

Tài khoản Yep sẽ được chuyển. –

+1

Kiểm tra http://stackoverflow.com/questions/6860686/extend-authorizeattribute-override-authorizecore-or-onauthorization (AuthorizeCore vs OnAuthorize) và đây là người đang xem xét một số dữ liệu Yêu cầu (ngân sách) cho một số dữ liệu để xác định nếu người dùng được ủy quyền hay không: http://stackoverflow.com/questions/5989100/asp-net-mvc-3-custom-authorisation –

Trả lời

17

Bạn có thể viết một phong tục Ủy quyền cho thuộc tính:

public class AuthorizeUserAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var isAuthorized = base.AuthorizeCore(httpContext); 
     if (!isAuthorized) 
     { 
      // The user is not authorized => no need to continue 
      return false; 
     } 

     // At this stage we know that the user is authorized => we can fetch 
     // the username 
     string username = httpContext.User.Identity.Name; 

     // Now let's fetch the account number from the request 
     string account = httpContext.Request["accountNumber"]; 

     // All that's left is to verify if the current user is the owner 
     // of the account 
     return IsAccountOwner(username, account); 
    } 

    private bool IsAccountOwner(string username, string account) 
    { 
     // TODO: query the backend to perform the necessary verifications 
     throw new NotImplementedException(); 
    } 
} 
+0

Cảm ơn bạn @Darin Dimitrov –

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