tôi sử dụng một AuthorizationFilter tùy chỉnh như sau:Nhận ActionName, ControllerName và AreaName và vượt qua nó trong ActionFilter Thuộc tính
public class ActionAuthorizeAttribute : AuthorizeAttribute {
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) {
if(!httpContext.User.Identity.IsAuthenticated)
return false;
if(IsUserExcluded())
return false;
else
return IsRoleAuthorize(httpContext);
}
}
tôi sử dụng bộ lọc này ở phía trên cùng của mỗi hành động tôi có, và để kiểm tra được ủy quyền, cần Tên Hành động, Tên Bộ điều khiển và Tên Khu vực. Vì vậy, có cách nào để có được tên này trong phương pháp AuthorizeCore()
như sử dụng System.Web.HttpContextBase
? nếu câu trả lời là Không thì làm sao tôi có thể nhận được tên này và vượt qua nó để thuộc tính, rõ ràng là tôi không muốn thêm mỗi tên bằng tay, thực sự cái gì đó như ViewContext.RouteData.Values["Controller"]
trong bộ điều khiển:
[ActionAuthorize(actionName=Action, controller=ControllerName, area=AreaName)]
public ActionResult Index() {
return View();
}
Có ai có bất kỳ ý tưởng về nó?
"Bạn có thể lấy chúng từ RouteData" Is not một câu trả lời hay. ** Bây giờ ** nó đã được chỉnh sửa, tôi sẽ trở lại. – gdoron
Điều này có thể chỉ trong ASP.NET MVC 4, nhưng khu vực này được tìm thấy trong rd.DataTokens ["khu vực"]. –
Bạn nên thay đổi dòng var rd = httpContext.Request.RequestContext.RouteData; tới var rd = HttpContext.Current.Request.RequestContext.RouteData; tốt hơn để sử dụng một tiêu chuẩn hơn một tham số :) –