我在我的 asp.net mvc Web 应用程序中有以下自定义授权类,我在我的操作方法之前调用它: -
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class CheckUserPermissionsAttribute : AuthorizeAttribute
{
public string Model { get; set; }
public string Action { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (!httpContext.Request.IsAuthenticated)
return false;
//code goes here................
if (!repository.can(ADusername, Model, value)) // implement this method based on your tables and logic
{ return false; }
return true;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
var viewResult = new JsonResult();
viewResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
viewResult.Data = (new { IsSuccess = "Unauthorized", description = "Sorry, you do not have the required permission to perform this action." });
filterContext.Result = viewResult;
}
else
{
var viewResult = new ViewResult();
viewResult.ViewName = "~/Views/Errors/_Unauthorized.cshtml";
filterContext.Result = viewResult;
}
// base.HandleUnauthorizedRequest(filterContext);
}
}
我在我的行动方法之前调用此自定义授权如下: -
[CheckUserPermissions(Action = "Read", Model = "Accounts")]
public ActionResult Index(){
目前正如上面的代码所示,当请求未被授权时,我将根据请求类型返回 JSON 或部分视图(如果它是 Ajax 请求)。
在我的代码中,我总是负责处理从 onsuccess 脚本中的自定义授权类返回的 json,如下所示: -
function addrecords(data) {
if (data.IsSuccess == "Unauthorized") {
jAlert(data.description, 'Unauthorized Access');
}
else if (data.IsSuccess) {
jAlert(data.description, 'Creation Confirmation');
}
目前我的方法运作良好,但我开始考虑是否应该继续我不会因未经授权的请求重新调整 401 http 响应这一事实?而不是我返回一个 http 200,作为状态=“unauthrized”的 json 对象或重定向到局部视图?
有人可以建议吗?
谢谢。
1 回答
我曾经这样做过:
并在 jquery 我签入通用
ajaxError
:要么:
在你的方法中你必须检查每个 Ajax 调用成功响应即将发生的事情,但在这种方法中,在未经授权的情况下返回 403 代码将使 Ajax 调用失败并执行错误回调,我们用来为 Ajax 编写通用错误处理程序检查状态代码是否是 ui 返回然后显示消息,它是未经授权的请求。
你可以看到细节:Asp.net mvc 检查用户已登录并在访问页面之前获得授权