关于c#属性的教程:http://www.runoob.com/csharp/csharp-attribute.html

在asp.net mvc5中,可以利用ActionFilterAttribute类,以添加属性的方式很方便地实现权限管理。

这里我们用一个简单案例来作为演示。

vs2017新建asp.net mvc5 项目,models文件夹新建AuthorizeFilterAttribute.cs:

using System.Web.Mvc;

namespace AuthDemo.Models
{ public class AuthorizeFilterAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext); string auth = filterContext.HttpContext.Request.Cookies["auth"]?.Value; bool isPass = string.Equals(auth,"true"); if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute),true)) //判断action是否有 [AllowAnonymous] 属性。这句很重要,如果不写的话 [AllowAnonymous] 就失效了
{
return;
} if (isPass)
{
return;
}
filterContext.Result = new ContentResult { Content = "权限不足" };
}
}
}

HomeController进行修改:

using AuthDemo.Models;
using System.Web;
using System.Web.Mvc; namespace AuthDemo.Controllers
{
[AuthorizeFilter]
public class HomeController : Controller
{
[AllowAnonymous] //允许绕过AuthorizeFilter
public ActionResult Index()
{
return View();
} public ActionResult About()
{
ViewBag.Message = "Your application description page."; return View();
} public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return View();
} [AllowAnonymous]
public ActionResult Auth()
{
Response.Cookies.Remove("auth");
Response.Cookies.Add(new HttpCookie("auth","true"));
return Content("cookie设置成功");
} public ActionResult TestAuth()
{
return Content("拥有权限");
}
}
}

一开始访问TestAuth方法显示的是权限不足,访问auth方法后在访问testauth方法则显示拥有权限。

如果不想用系统自带的AllowAnonymous类也可以自定义类。比如AuthorizeFilterAttribute修改成:

using System.Web.Mvc;

namespace AuthDemo.Models
{ public class AuthorizeFilterAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext); string auth = filterContext.HttpContext.Request.Cookies["auth"]?.Value; bool isPass = string.Equals(auth,"true"); if (filterContext.ActionDescriptor.IsDefined(typeof(NoAuthRequireAttribute),true)) //即使使用了自定义类也不能省略这句。
{
return;
} if (isPass)
{
return;
}
filterContext.Result = new ContentResult { Content = "权限不足" };
}
} public class NoAuthRequireAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
}
}
}

HomeController改成:

using AuthDemo.Models;
using System.Web;
using System.Web.Mvc; namespace AuthDemo.Controllers
{
[AuthorizeFilter]
public class HomeController : Controller
{
[AllowAnonymous]
public ActionResult Index()
{
return View();
} public ActionResult About()
{
ViewBag.Message = "Your application description page."; return View();
} public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return View();
} [NoAuthRequire]
public ActionResult Auth()
{
Response.Cookies.Remove("auth");
Response.Cookies.Add(new HttpCookie("auth","true"));
return Content("cookie设置成功");
} public ActionResult TestAuth()
{
return Content("拥有权限");
}
}
}

同样可以实现。

asp.net mvc 5 利用ActionFilterAttribute实现权限过滤的更多相关文章

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

    相信对权限过滤大家伙都不陌生 用户要访问一个页面时 先对其权限进行判断并进行相应的处理动作 在webform中 最直接也是最原始的办法就是 在page_load事件中所有代码之前 先执行一个权限判断的 ...

  2. Asp.net Mvc中利用ValidationAttribute实现xss过滤

    在网站开发中,需要注意的一个问题就是防范XSS攻击,Asp.net mvc中已经自动为我们提供了这个功能.用户提交数据时时,在生成Action参数的过程中asp.net会对用户提交的数据进行验证,一旦 ...

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

    http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架 ...

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

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这 ...

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

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也 ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

随机推荐

  1. A1075 PAT Judge (25)(25 分)

    A1075 PAT Judge (25)(25 分) The ranklist of PAT is generated from the status list, which shows the sc ...

  2. HDU - 6514 Monitor(二维差分)

    题意 给定一个\(n×m\)的矩阵.(\(n×m <= 1e7\)). \(p\)次操作,每次可以在这个矩阵中覆盖一个矩形. \(q\)次询问,每次问一个矩形区域中,是否所有的点都被覆盖. 解析 ...

  3. [Poj2761]Feed the dogs(主席树)

    Desciption 题意:求区间第K小(N<=100000) Solution 主席树模板题 Code #include <cstdio> #include <algorit ...

  4. OWINS是什么(转载)

    OWIN的英文全称是Open Web Interface for .NET. 如果仅从名称上解析,可以得出这样的信息:OWIN是针对.NET平台的开放Web接口. 那Web接口是谁和谁之间的接口呢?是 ...

  5. dcpromo(server2012不支持)

    dcpromo 编辑 dcpromo命令是一个“开关”命令.如果Windows 2000 Server计算机是成员服务器,则 运行dcpromo命令会安装活动目录,将其升级为域控制器:如果Window ...

  6. MongoDB快速入门学习笔记6 MongoDB的文档删除操作

    db.集合名称.remove({query}, justOne)query:过滤条件,可选justOne:是否只删除查询到的第一条数据,值为true或者1时,只删除一条数据,默认为false,可选. ...

  7. 利用js阻止表单提交

    (1) return false <form name="loginForm" action="login.aspx" method="post ...

  8. redis命令monitor详解

    通过monitor这个命令可以查看数据库在当前做了什么操作,对于管理redis数据库有这很大的帮助 如图示,在redis客户端进行操作显示info,另一个窗口打开monitor就会显示出这个命令的操作 ...

  9. 生产环境下yum的配置

    介绍在局域网里面配置本地yum源环境: 在私有云的服务器上配置本地yum源 在局域网中有多台服务器,网段为192.168.10.0/24在其中一台10.11配置本地yum源,其他服务器中的baseur ...

  10. Codeforeces 954C Matrix Walk

    题目大意 考虑一个 $x\times y$ 的矩阵 $A_{x\times y}$ ,$A_{i,j} = (i-1)x+y$ . 从矩阵中的某个位置出发,每次可向上下左右移动一步,每到一个位置,记录 ...