当前位置:  开发笔记 > 后端 > 正文

在ASP.NET MVC中自定义授权

如何解决《在ASP.NETMVC中自定义授权》经验,为你挑选了1个好方法。

我的Controller类使用AuthorizeAttribute进行修饰以保护操作:

[Authorize(Roles = "User Level 2")]
public class BuyController : Controller
{
    ...
}

无论何时调用某个操作但用户至少不是"用户级别2"角色,他会自动重定向到登录页面,其中包含以下URL:

HTTP://本地主机:1436 /帐号/登录RETURNURL =%2fBuy

如果用户已登录但没有正确的安全级别,则这不是最佳行为!显示一个页面会更有意义,该页面通知用户缺少的级别而不是显示登录页面.

我该怎么做才能自定义此行为?是否有可能以某种方式将所需的用户级别传递给Login操作?



1> Trevor de Ko..:

您可以像这样构建自己的authorize属性:

public class ClubAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
  base.OnAuthorization(filterContext);
  if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult)
  {
    filterContext.Result = new RedirectToRouteResult(
      new RouteValueDictionary {
      { "clubShortName", filterContext.RouteData.Values[ "clubShortName" ] },
      { "controller", "Account" },
      { "action", "Login" },
      { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
    });
  }
}
}

我用它来重定向到我正在建立的俱乐部会员网站中的特定俱乐部.你可以根据自己的需要调整它.顺便说一句,在我的情况下,我会重定向到登录页面,但我检查用户是否已获得授权,如果是,则显示一条消息,表明他们没有正确的权限.毫无疑问,您还可以在页面上显示ViewData或TempData的内容,但我还没试过

编辑 AuthorizationContext.Cancel在RC中不再存在."filterContext.Result是HttpUnauthorizedResult"似乎已经足够了:filterContext.Cancel(ASP.NET MVC)发生了什么


filterContext似乎没有Cancel成员.我错过了一些扩展方法吗?
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有