Tôi đang cố gắng thực hiện một số ủy quyền tùy chỉnh để tôi tạo một bộ điều khiển ghi đè phương thức OnAuthorization
. Tôi cũng áp dụng thuộc tính Authorize
cho bộ điều khiển này. Câu hỏi đặt ra là tại sao phương pháp OnAuthorization
được gọi là TRƯỚC KHI quá trình xác thực biểu mẫu cơ bản?Tại sao thực hiện onAuthorization trước khi xác thực?
Tôi muốn ủy quyền cho người dùng sau khi được xác thực. Tôi có thiếu gì đó không?
Đây là mã:
[Authorize]
public class AuthorizationController : Controller
{
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
List<string> allowedControllers = new List<string>() { "SecurityController" };
List<string> allowedActions = new List<string>() { "Index" };
string controllerName = filterContext.Controller.GetType().Name;
string actionName = filterContext.ActionDescriptor.ActionName;
if (!allowedControllers.Contains(controllerName)
|| !allowedActions.Contains(actionName))
{
filterContext.Result = View("UnauthorizedAccess");
}
}
}
Bộ điều khiển mà tôi thử nghiệm với một cái gì đó như:
public class SecurityController : AuthorizationController
{
public ActionResult Index()
{
return View();
}
public ActionResult AnotherIndex()
{
return View();
}
}
Vâng, nó không xảy ra như tôi mong đợi. Đối với ví dụ trên, khi tôi muốn truy cập hành động AnotherIndex, tôi mong đợi để có được trang đăng nhập, nhưng tôi đang nhận được UnauthorizedAccess. – misha
Sau khi chỉnh sửa: Tôi hiểu, nhưng nếu tôi ghi đè lên AuthorizeAttribute, tôi không có quyền truy cập để thực hiện các hành động khác như chuyển hướng người dùng đến trang cho biết anh ta không được ủy quyền thay vì không đăng nhập ... – misha
@misha Chắc chắn rằng bạn làm. Điều gì khiến bạn nghĩ rằng bạn không thể? – Dismissile