6

Tôi đang cố gắng bảo vệ hành động của bộ điều khiển để ngăn người dùng truy cập vào Thực thể mà họ không có quyền truy cập. Tôi có thể làm điều này với mã sau đây.Làm thế nào để sử dụng Custom AuthorizeAttribute cho bộ điều khiển sử dụng giá trị tham số?

public ActionResult Entity(string entityCode) 
{ 
    if (CurrentUser.VerifyEntityPermission(entityCode)) 
    { 
     //populate viewModel... 
     return View(viewModel); 
    } 
    return RedirectToAction("NoAccessToEntity", "Error"); 
} 

Tôi muốn có thể thêm thuộc tính vào chính hành động của trình điều khiển. Để xác thực quyền truy cập vào thực thể, tôi cần xem giá trị nào đã được chuyển tới bộ điều khiển và những thực thể nào người dùng có quyền truy cập. Điều này có thể không?

[EntityAuthRequired] 
public ActionResult Entity(string entityCode) 
{ 
     //populate viewModel... 
     return View(viewModel); 
} 
+0

cách bạn đã làm điều đó – Dragon

Trả lời

3

Điều gì đó tương tự có thể giúp bạn trên con đường của bạn. Mặc dù bạn có thể muốn thêm một số thuộc tính bổ sung vào thuộc tính của mình để cho phép bạn chỉ định tham số entityCode của mình trên mỗi hành động, thay vì mã hóa nó.

public class EntityAuthRequired : FilterAttribute, IAuthorizationFilter 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     //Make sure that this is not NULL before assigning value as string... 
     var entityCode = filterContext.RouteData.Values["entityCode"] as string; 
     // do your logic...   
     if (!allowed) 
      filterContext.Result = new HttpUnauthorizedResult();    
    } 
} 

Ngoài ra, nếu entityCode không có trong RouteData của bạn, bạn có thể sử dụng filterContext.RequestContext.HttpContext.Request để xem xét dữ liệu POST.

+0

cách nhận giá trị json bài đăng trong Authorizeattribute.and trong phương thức AuthorizeRequest – Dragon