我需要有关如何授权按角色访问 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...
}
答案 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}}