ASP.NET MVC 利用ActionFilterAttribute来做权限等

www.cnblogs.com/waitingfor/archive/2011/12/27/2303784.html

ActionFilterAttribute是Action过滤类,该属于会在执行一个action之前先执行.而ActionFilterAttribute是 MVC的一个专门处理action过滤的类.基于这个原理 我们做一个权限限制

例如:如何访问 HomeController  里的test  action

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using MvcTest.Models;namespace MvcTest.Controllers{    public class HomeController : Controller    {        //        // GET: /Home/

        public ActionResult Index()        {

            return View();        }        [AuthorizeFilter]        public ActionResult test()        {            return Content("有权访问");        }    }}

建立AuthorizeFilterAttribute.cs   内容如下

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;

namespace MvcTest.Models{    /// <summary>    /// 权限拦截    /// </summary>    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]    public class AuthorizeFilterAttribute : ActionFilterAttribute    {        filterContextInfo fcinfo;        // OnActionExecuted 在执行操作方法后由 ASP.NET MVC 框架调用。        // OnActionExecuting 在执行操作方法之前由 ASP.NET MVC 框架调用。        // OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。        // OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。

        /// <summary>        /// 在执行操作方法之前由 ASP.NET MVC 框架调用。        /// </summary>        /// <param name="filterContext"></param>        public override void OnActionExecuting(ActionExecutingContext filterContext)        {

            fcinfo = new filterContextInfo(filterContext);            //fcinfo.actionName;//获取域名            //fcinfo.controllerName;获取 controllerName 名称

            bool isstate = true;            //islogin = false;            if (isstate)//如果满足            {                //逻辑代码                // filterContext.Result = new HttpUnauthorizedResult();//直接URL输入的页面地址跳转到登陆页                  // filterContext.Result = new RedirectResult("http://www.baidu.com");//也可以跳到别的站点                //filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary(new { Controller = "product", action = "Default" }));            }            else            {                filterContext.Result = new ContentResult { Content = @"抱歉,你不具有当前操作的权限!" };// 直接返回 return Content("抱歉,你不具有当前操作的权限!")            }

        }        /// <summary>        /// 在执行操作方法后由 ASP.NET MVC 框架调用。        /// </summary>        /// <param name="filterContext"></param>        public override void OnActionExecuted(ActionExecutedContext filterContext)        {

            base.OnActionExecuted(filterContext);        }

        /// <summary>        ///  OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。        /// </summary>        /// <param name="filterContext"></param>        public override void OnResultExecuted(ResultExecutedContext filterContext)        {            base.OnResultExecuted(filterContext);        }        /// <summary>        /// OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。        /// </summary>        /// <param name="filterContext"></param>        public override void OnResultExecuting(ResultExecutingContext filterContext)        {            base.OnResultExecuting(filterContext);        }

    }

    public class filterContextInfo    {        public filterContextInfo(ActionExecutingContext filterContext)        {            #region 获取链接中的字符            // 获取域名            domainName = filterContext.HttpContext.Request.Url.Authority;

            //获取模块名称            //  module = filterContext.HttpContext.Request.Url.Segments[1].Replace(‘/‘, ‘ ‘).Trim();

            //获取 controllerName 名称            controllerName = filterContext.RouteData.Values["controller"].ToString();

            //获取ACTION 名称            actionName = filterContext.RouteData.Values["action"].ToString();

            #endregion        }        /// <summary>        /// 获取域名        /// </summary>        public string domainName { get; set; }        /// <summary>        /// 获取模块名称        /// </summary>        public string module { get; set; }        /// <summary>        /// 获取 controllerName 名称        /// </summary>        public string controllerName { get; set; }        /// <summary>        /// 获取ACTION 名称        /// </summary>        public string actionName { get; set; }

    }

}
时间: 2024-12-25 05:55:58

ASP.NET MVC 利用ActionFilterAttribute来做权限等的相关文章

ASP.NET MVC+EF框架+EasyUI实现权限管理系列

http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个 项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个 系列

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这个权限系统的初步设计-框架搭建,首先我要说的是我们需要开发工具Visual Studio 2012或者10也行,其次是我们要有SQL Server数据库,如果是Visual Studio 2010的话,你还要安装MVC4的开发文件,这个是吗?我不记得了,谁可以回答我一下的,我一直用2012,都是集成

ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个系列,可能要很长时间吧,但是我肯定会一直坚持,如果我哪里写的不好欢迎大家指出我们共同学习,而且我理解的也不是很透彻,所以我想在写这样一遍

ASP.NET MVC学习---(九)权限过滤机制(完结篇)

相信对权限过滤大家伙都不陌生 用户要访问一个页面时 先对其权限进行判断并进行相应的处理动作 在webform中 最直接也是最原始的办法就是 在page_load事件中所有代码之前 先执行一个权限判断的方法 至于其专业的权限机制这里不做讨论 想要了解的同学可以自行google之 或者点击进入: webform专业的权限验证机制 那么mvc中是如何实现权限验证的? 据我们所知 mvc中是根据路由配置来请求控制器类中的一个方法 并没有webform中的page_load方法 难道我们要在每个actio

ASP.NET MVC+EF框架+EasyUI实现权限管理

4.为什么使用MVC而不是用WebForm呢? (1)为什么使用MVC而不是用WebForm呢?这个是我临时想的,因为我就是想说明一下WebForm和MVC的优缺点,来可以使大家能够更好地理解 MVC和WebForm,而不像某些人说MVC会替代WebForm,我个人认为这个可能性很小,因为各有各的好处,看在哪里使用吧,下面我就简单介绍下 WebForm和MVC的优缺点. (2)WebForm介绍 1)优点 1):支持事件模型,取决于微软提供了丰富的服务器端组建,WebForm可以快速的搭建Web

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程 前言:前面几篇博客我们基本已经介绍完了搭建整个项目和数据库访问层以及一些业务逻辑层的实现,当然了,我们的数据库访问层这样还是可以在进行封装的,但是我到这里就行了吧,项目也不大,不需要那么麻烦的,那么我们今天开始介绍我们需要介绍的内容,那就是我

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现 前言:通过前面的五篇博客我们已经对权限系统的后台架构进行了详细的说明,那么我再前面的博客中也说到了我们的后台架构还会再改的,我准备这段时间我们继续完善我们的后台

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现   (6):EF上下文实例管理 前言:上篇博客中我们重新对EF框架实现上下文进行了重新的操作,而且我们也建立了DbSession,使用CallContext

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(9)-TT模板的学习 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现   (6):EF上下文实例管理   (7):DBSession的封装   (8):DBSession线程内唯一 前言:前面我们基本已经完成了一个Demo,我们在后面的