mvc 自定义 AuthorizeAttribute 验证逻辑

public class AuthorizationFilterAttribute : AuthorizeAttribute
    {
        Dictionary<string, string> roles = new Dictionary<string, string>() {
        {"1","/Home/Index"},
        {"2",""},
        };

        /// <summary>
        /// 自定义验证逻辑 返回false时 才会执行HandleUnauthorizedRequest
        /// </summary>
        /// <param name="httpContext"></param>
        /// <returns></returns>
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            var id = Convert.ToString(httpContext.Request.QueryString["id"]);

            if (id == null || !roles.ContainsKey(id))
                return false;

            string controller = Convert.ToString(httpContext.Request.RequestContext.RouteData.Values["controller"]);
            string action = Convert.ToString(httpContext.Request.RequestContext.RouteData.Values["action"]);

            return string.Compare(roles[id], string.Format("/{0}/{1}", controller, action), true) == 0;
        }

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            UrlHelper url = new UrlHelper(filterContext.HttpContext.Request.RequestContext);
            filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;

            filterContext.Result = new RedirectResult(url.Action("login", "home"));
        }
    }

 

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new AuthorizationFilterAttribute());
            filters.Add(new HandleErrorAttribute());
        }

  

filterContext.Result只要不为空Action就会终止。直接响应请求。
时间: 2024-10-12 19:58:18

mvc 自定义 AuthorizeAttribute 验证逻辑的相关文章

MVC自定义AuthorizeAttribute实现权限管理

[转]MVC自定义AuthorizeAttribute实现权限管理 原文载自:小飞的DD http://www.cnblogs.com/feiDD/articles/2844447.html 网站的权限管理是一个很重要的功能,MVC中怎么实现对于网站的权限管理呢. 在MVC中有一个名为AuthorizeAttribute的类,我们可以创建我们自己的特性 MemberValidationAttribute类,然后继承AuthorizeAttribute类来实现我们自己的网站权限的管理.然后通过将

MVC 自定义AuthorizeAttribute实现权限管理

[Authorize] public ActionResult TestAuthorize() { return View(); } [Authorize(Users="test1,test2")] public ActionResult TestAuthorize() { return View(); } [Authorize(Roles="Admin")] public ActionResult TestAuthorize() { return View();

ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebForm和MVC也都越来越完善,小小算来我也已经工作了将近三年,从大学的时候学习ASP.NET WebForm,感觉这就是我们以后吃饭的技术,所以当时可劲的学习拖各种控件,学习做各种各样的小项目,但是没想到的是,从大学最后一学期参加实习开始到现在也就一直没有机会接触ASP.NET WebForm,基本也都是在用MVC开发.我并不是说MVC就比WebForm开发好或者什么的,我只是觉得他们都

asp.net mvc 自定义身份验证 2

控制成员角色 [Authorize(Rroles="Administator,SuperAdmin")] public class StoreManagerController:Controller 或者授权给部分用户 [Authorize(Users="jon,pp")] [Authorize(Roles="admin",Users="jon,pp")]

自定义验证逻辑

Asp.net MVC框架的扩展性意味着实现自定义验证逻辑有着很大的可行性.主要有两个核心方法: 1.将验证逻辑封装在自定义的数据注解中. 2.将验证逻辑封装在模型对象中. 把验证逻辑封装在自定义数据注解中可以轻松地实现在多个模型中重用逻辑,这需要在特性内部编写代码以对应不同类型的模型,一旦实现了,新的注解就可以在多处重用. 如果把验证逻辑放入模型对象中,就意味着验证逻辑可以很容易的编码实现,但不利于实现逻辑的重用. 一.自定义注解 所有的验证注解特性最终都派生自基类:ValidationAtt

Mvc自定义验证

假设我们书店需要录入一本书,为了简单的体现我们的自定义验证,我们的实体定义的非常简单,就两个属性,一个名称Name,一个出版社Publisher. public class BookInfo { public string Name { get; set; } public string publisher { get; set; } } Ok,需求有了,实体有了,那么添加我们的控制器和视图.先把代码贴出来.稍后我们在做分析 [HttpGet] public ActionResult Index

爱上MVC~AuthorizeAttribute验证不通过如何停止当前上下文

回到目录 我们知道mvc里有一些过滤器,AuthorizeAttribute用来做授权,一般在用户授权方面可以使用它,当使用没有登陆,我们直接跳到登陆页,这是没有问题的,可我要说的是,当用户对某个Action没有权限时,如何禁止对当前action的执行,这个听起来很不可思议,因为我们一般感觉,当AuthorizeAttribute验证不通过后,它的当前action也不会被执行,可事实并非如此! 看下面代码 public override void OnAuthorization(Authoriz

ASP.NET MVC自定义验证Authorize Attribute(包含cookie helper)

前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密>http://www.cnblogs.com/insus/p/5983645.html那今次Insus.NET在ASP.NET MVC实现自定义验证Authorize Attribute. 实现之前,Insus.NET对usp_Users_VeryLoginVerify修改一下,改为更好理解与使用

MVC WebApi 用户验证 (2)

构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(66)-MVC WebApi 用户验证 (2) 前言: 构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(65)-MVC WebApi 用户验证 (1) 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访问接口,管理接