如何在JsonResults方法上实现Roles的授权过滤器?

时间:2018-02-15 03:10:47

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 jsonresult

我需要有关如何授权按角色访问 JsonResults 方法的帮助。我有以下示例代码使用自定义授权过滤器属性,它适用于 ActionResults PartialViewResults 方法但不适用于 JsonResults。我想找到一种方法,如果角色名称无权访问该JsonResults方法,则应重定向 到Unauthorized页面或者只是不以某种方式执行,如果它有访问权限,那么它应该执行该方法, 但在这种情况下,它的行为并不那样。即使角色有,它也不会执行JsonResult方法 访问它。如何解决此类情况? 谢谢......以下是我使用的代码

public class RedirectUnauthorizedRoles : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {         
            if (this.AuthorizeCore(filterContext.HttpContext))
            {
                base.OnAuthorization(filterContext);
            }
            else
            {

                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { Controller = "Error", Action = "Unauthorised" }));
            }
        }
    }

使用此

工作正常
[RedirectUnauthorizedRoles(Roles = "MANAGER, ADMIN, SUPPORT")]  
public ActionResult Index()
{
return View();
}

但不在下面这个

[RedirectUnauthorizedRoles(Roles = "MANAGER, ADMIN, SUPPORT")]  
public JsonResult GetSpecialData(string param1)
{
 // statement here...
}

1 个答案:

答案 0 :(得分:1)

你好@timmack在RedirectUnauthorizedRoles Filter我已经返回了JsonResult。如果用户有效,那么我们将返回“1”作为值,如果User无效,那么我们将返回“0”到Ajax方法,我希望它可以帮助你。

  

过滤

    <script type="text/javascript">
        function demox() {
            $.ajax({
                url: '/Controller/ActionMethod',
                type: "POST",
                data: { 'token': 'Demo' },
                contentType: false,
                processData: false,
                success: function (result) {

                    if (result === "0")
                    {
                        alert("Not Authorized");
                        return window.location.href = "/Error/Error";
                    }

                    return window.location.href = "/ValidPage URL";
                },
                error: function (err)
                {
                    alert(err.statusText);
                }
            });
        }

</script>
  

Ajax方法

{{1}}