加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在ASP.NET MVC中定制授权

发布时间:2020-12-15 18:53:58 所属栏目:asp.Net 来源:网络整理
导读:我的Controller类用一个AuthorizeAttribute装饰以保护操作: [Authorize(Roles = "User Level 2")]public class BuyController : Controller{ ...} 每当一个动作被调用,但用户至少不是在“用户级别2”角色,他会被自动重定向到登录页面与一个url如下: http
我的Controller类用一个AuthorizeAttribute装饰以保护操作:
[Authorize(Roles = "User Level 2")]
public class BuyController : Controller
{
    ...
}

每当一个动作被调用,但用户至少不是在“用户级别2”角色,他会被自动重定向到登录页面与一个url如下:

http://localhost:1436/Account/Login?ReturnUrl=%2fBuy

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

我可以做什么来自定义此行为?
是否可能将所需的用户级别传递到登录操作?

解决方法

你可以像这样构建自己的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 }
    });
  }
}
}

我用这个重定向到我在建立的俱乐部会员网站中的特定俱乐部。你可以根据你的需要来适应。 BTW,在我的情况下,我做重定向到登录页面,但我检查以查看用户是否被授权,如果是,显示一条消息,他们没有正确的权限。毫无疑问,你还可以添加一些东西到ViewData或TempData显示在页面上,但我还没有尝试过

编辑
AuthorizationContext.Cancel在RC中不再存在。 “filterContext.Result is HttpUnauthorizedResult”似乎足够:What happened to filterContext.Cancel (ASP.NET MVC)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读