日期:2014-05-17  浏览次数:20526 次

MVC AuthorizeAttribute 控制用户跳转,action方法还是被执行了 问题
ASP.NET MVC 3 自学ing

我想用FormsAuthentication来控制权限,

我要的很简单:
没有登录就访问,则跳到登录页面
登录后没权限访问,则提示“无权访问”,不要跳转到登录页面
我实现后 结果发现 被限制的action方法还是会被执行一次,过后页面才显示“无权访问”

我实现的方法如下:

继承AuthorizeAttribute,重写OnAuthorization方法:
public class OperatorAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            var formId = HttpContext.Current.User.Identity as FormsIdentity;
            if (formId != null && formId.IsAuthenticated)
            {
                var rolesTemp = formId.Ticket.UserData.Split('&');
                var roles = rolesTemp[0];
                if (!Roles.Contains(roles))
                {
                    filterContext.RequestContext.HttpContext.Response.Write("无权访问");
                    filterContext.RequestContext.HttpContext.Response.End();    
                }
                else
                {
                    FormsAuthentication.RedirectFromLoginPage(formId.Name,false);
                }
            }
            else
            {
                FormsAuthentication.RedirectToLoginPage();
            }
        }
    }

控制器中:(登录后权限编码不在3,25,26,27,28,29中的就提示“无权访问”)
[OperatorAuthorize(Roles = "3,25,26,27,28,29")]
        public ViewResult Index(int? currentPage)
        {
            int currentIndex = currentPage.HasValue ? currentPage.Value : 1;
            int pageSize = CommonAction.GetPageSize();
            int total = db.Clients.Count();
    &n