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


    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; }
    
        }
    
    }

    DEMO 下载

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

  • 相关阅读:
    clock时钟
    Excel一对多查找
    tcl概述
    Linux命令(一)
    perl合并文件
    数字IC设计工程师的知识结构
    阿里云ECS专有网络下安装flannel注意事项
    阿里云kubernetes遭入侵pubg进程占用cpu资源100%解决方法
    JSON Web Tokens测试工具
    Linux搭建Node.js环境
  • 原文地址:https://www.cnblogs.com/superfeeling/p/4877013.html
Copyright © 2020-2023  润新知