我的Controller类使用AuthorizeAttribute进行修饰以保护操作:
[Authorize(Roles = "User Level 2")] public class BuyController : Controller { ... }
无论何时调用某个操作但用户至少不是"用户级别2"角色,他会自动重定向到登录页面,其中包含以下URL:
HTTP://本地主机:1436 /帐号/登录RETURNURL =%2fBuy
如果用户已登录但没有正确的安全级别,则这不是最佳行为!显示一个页面会更有意义,该页面通知用户缺少的级别而不是显示登录页面.
我该怎么做才能自定义此行为?是否有可能以某种方式将所需的用户级别传递给Login操作?
您可以像这样构建自己的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)发生了什么