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

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 在ASP.NET MVC中定制授权前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的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)

猜你在找的asp.Net相关文章