ASP.NET Core利用拦截器 IActionFilter实现权限控制
“麦荻网教系统”采用了前后端代码分离的架构,即“Miidy.Cloud.Console”站与“Miidy.Cloud.Manage”站(两个前端站)同时通过web api的方式调用“Miidy.Cloud.RestWeb” web服务,以达到前后端代码分离的方式(详情请查看麦荻网教系统的安装部署文档)。因为“Miidy.Cloud.Manage”站只开放给具备管理权限的用户,故除了在前端增加控制外,还需在“Miidy.Cloud.RestWeb” web服务内进行权限控制。那么,如何在“Miidy.Cloud.RestWeb” web服务内根据用户实现权限控制呢?
IActionFilter
在“Miidy.Cloud.RestWeb”程序内,我们将借助IActionFilter接口来实现请求的拦截。该接口提供了两个方法(官网文档)分别为:OnActionExecuted(Action执行后)、OnActionExecuting(Action执行前)。根据需求,我们实现OnActionExecuting即可。
Attribute
我们再借助“Attribute”属性特性,可帮助我们在“Miidy.Cloud.RestWeb”指定的方法内按需使用拦截器,这样便可很方便的达到权限控制的目的。
实现
如上面所述,我们已经清楚了整个实现思路,那么下面就来看看“Miidy.Cloud.RestWeb”程序拦截器的代码实现吧:
1、首先我们先创建一个名为“ManageVerifyAttribute”的拦截器类,命名以“Attribute”结尾,并继承“Attribute”类,与实现“IActionFilter”。并在OnActionExecuting方法内写入业务代码。具体代码如下:
1 2 namespace Miidy.Cloud.Provider 3 { 4 /// <summary> 5 /// 该过虑器提供给所有对外的RestApi接口使用 6 /// 在有需要验证每个接口/方法是否只为管理人员用户调用时使用 7 /// 方法级别的过率器 8 /// </summary> 9 public class ManageVerifyAttribute : Attribute, IActionFilter 10 { 11 public void OnActionExecuted(ActionExecutedContext context) 12 { 13 } 14 15 /// <summary> 16 /// 判断用户是否为管理角色,不是则抛出异常 17 /// </summary> 18 /// <param name="context"></param> 19 public void OnActionExecuting(ActionExecutingContext context) 20 { 21 if (context.HttpContext.User.Identity.IsAuthenticated) 22 { 23 var roleType = int.Parse(context.HttpContext.User.Claims.First(c => c.Type == "roleType").Value); 24 //不是管理人员 25 if (roleType <= 0 || roleType >= 4) 26 { 27 context.Result = new JsonResult(new Result(214)); 28 } 29 } 30 else 31 context.Result = new JsonResult(new Result(214)); 32 } 33 34 } 35 } 36
2、在Web Api的方法内打上[ManageVerify]属性,即可完成拦截器的功能实现了,具体如下:
1 2 /// <summary> 3 /// 同步单个数据,数据不存在则增加,否则修改 4 /// </summary> 5 /// <param name="ids"></param> 6 /// <returns></returns> 7 [Route("SynchrDataByModel")] 8 [HttpPost] 9 [ManageVerify] 10 public async Task<Result> SynchrDataByModel(MC_Ware model) 11 { 12 var resul = await _WareCore.SynchrDataAsync(new List<MC_Ware> { model }); 13 if (resul <= 0) 14 return new Result(211); 15 return new Result(200); 16 }
总结
1、基于“IActionFilter”接口来实现请求的拦截。
2、基于“Attribute”属性特性可帮助我们可以按需在指定WebApi方法内使用拦截器。
声明
本文为作者原创,转载请备注出处与保留原文地址,谢谢。如文章能给您带来帮助,请点下推荐或关注,感谢您的支持!
转载于:https://www.cnblogs.com/Miidy/p/11176614.html
ASP.NET Core利用拦截器 IActionFilter实现权限控制相关推荐
- 拦截器,利用拦截器进行登陆权限控制
拦截器,登录权限控制demo 1. 拦截器demo 2. 登录权限控制 地址: https://github.com/sevenyoungairye/spring-mvc-interceptor 1. ...
- SpringMVC拦截器-用户登录权限控制代码实现2
在登陆页面输入用户名密码,点击登陆,通过用户名密码进行查询,如果登陆成功,则将用户信息实体存入session,然后跳转到首页,如果登陆失败则继续回到登陆页面 在UserController中编写登陆逻 ...
- SpringMVC拦截器-用户登录权限控制代码实现1
判断用户是否登录 本质:判断session中有没有user,如果没有登陆则先去登陆,如果已经登陆则直接放行访问目标资源 先编写拦截器如下: public class PrivilegeIntercep ...
- struts2如何使用拦截器进行用户权限控制
大多数网站会设置用户权限,如过滤非法用户,用户不登录时不能进行访问,或者设置访问的权限,如部分内容仅对VIP开放等等,这些权限的控制都可以用struts2中的拦截器来实现. 下面通过一个简单的Demo ...
- SpringMVC拦截器-用户登录权限控制代码实现3
JdbcTemplate.queryForObject对象如果查询不到数据会抛异常,导致程序无法达到预期效果,如何来解决该问题? 在业务层处理来自dao层的异常,如果出现异常service层返回nul ...
- 基于三段式命令及筛选器的rbac权限控制方案
引用自 摸鱼wiki,点击可查看原文 1. 权限命令的表示 1.1 权限命令 采用三段式设计,将命令划分为类型.操作.属性/对象三个层级.相较于采用常量声明,这样的写法可以支持使用通配符进行设置,减少 ...
- asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User
前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cooki ...
- Flume下读取kafka数据后再打把数据输出到kafka,利用拦截器解决topic覆盖问题
1:如果在一个Flume Agent中同时使用Kafka Source和Kafka Sink来处理events,便会遇到Kafka Topic覆盖问题,具体表现为,Kafka Source可以正常从指 ...
- [翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志
一步一步指导您使用 ElasticSearch, Kibana, ASP.NET Core 2.1 和 Docker 来记录日志 在本教程中,我将向您展示如何启动和运行 ElasticSearch,K ...
最新文章
- linux如何生成javacore文件,如何产生javacore和heapdump文件》
- url主机域名可以省略_网站迁移虚拟主机怎么样能不影响网站优化
- Redis进阶-lua脚本
- 2020-11-13(四大组件简单回忆内容)
- 使用SAP HANA Web-based Development Workbench进行SQLScript练习
- C语言中枚举enum的用法
- 联想超融合平台oracle,联想AIO超融合云一体机解决方案.pdf
- java死锁怎么用jvm调试,线程死锁演示,线程锁演示,模拟JVM的线程次序调度
- Safari技术预览版141来啦,增加了哪些新功能?
- 在真实数据集上的随机森林模型参数调优
- python - super 寻找继承关系
- DOM扩展-HTML5、专有扩展
- 「支持m1」命令行终端美化模拟器—Hyper for Mac
- Linux环境变量配置【转】
- VS2017离线安装过程及下载缓慢处理(项目打包部署)
- cad插件加载bplot成功用不了_CAD批量打印,加载Batchplot.vlx那个。 为什么我电脑输入BPLOT命令后没反应啊??急急急,求大神们解救!...
- window10使用bat脚本配置ip和dns
- 大数据时代的安全威胁
- Failed to load module “canberra-gtk-module“
- avr c语言编译器,[VR虚拟现实]AVR单片机C语言编译器.doc
热门文章
- Flask Jinja2 模板中的变量和过滤器
- 一道非常简单的签到题
- 北大核心期刊2012《科技通报》杂志简介《科技通报》论文范文
- 深度学习《残差网络简单学习》
- pytorch保存模型pth_pytorch中保存的模型文件.pth深入解析
- sql报表按月统计_用Excel如何对销售数据按月分别统计成本,销售额以及利润?...
- Linux和Windows下计算文件的Hash值
- toj 4615 Tetrahedrons and Spheres
- vcenter6.7许可证企业版_本地的公司看过来,增值电信业务许可证如何办理!
- jboss怎么连接Oracle数据库,如何在Jboss中配置数据源