Fan*_*o77 26 security asp.net-mvc authorization
我的Controller类使用AuthorizeAttribute进行修饰以保护操作:
[Authorize(Roles = "User Level 2")]
public class BuyController : Controller
{
...
}
Run Code Online (Sandbox Code Playgroud)
无论何时调用某个操作但用户至少不是"用户级别2"角色,他会自动重定向到登录页面,其中包含以下URL:
HTTP://本地主机:1436 /帐号/登录RETURNURL =%2fBuy
如果用户已登录但没有正确的安全级别,则这不是最佳行为!显示一个页面会更有意义,该页面通知用户缺少的级别而不是显示登录页面.
我该怎么做才能自定义此行为?是否有可能以某种方式将所需的用户级别传递给Login操作?
Tre*_*oek 38
您可以像这样构建自己的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 }
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用它来重定向到我正在建立的俱乐部会员网站中的特定俱乐部.你可以根据自己的需要调整它.顺便说一句,在我的情况下,我会重定向到登录页面,但我检查用户是否已获得授权,如果是,则显示一条消息,表明他们没有正确的权限.毫无疑问,您还可以在页面上显示ViewData或TempData的内容,但我还没试过
编辑 AuthorizationContext.Cancel在RC中不再存在."filterContext.Result是HttpUnauthorizedResult"似乎已经足够了:filterContext.Cancel(ASP.NET MVC)发生了什么
归档时间: |
|
查看次数: |
19902 次 |
最近记录: |