惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
F
Fortinet All Blogs
D
Docker
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
罗磊的独立博客
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
U
Unit 42
N
Netflix TechBlog - Medium
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
Stack Overflow Blog
Stack Overflow Blog
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Proofpoint News Feed
G
Google Developers Blog
H
Help Net Security

博客园 - ChatInfo

一次 Android 抓包引出的疑问:Tor Browser 桌面模式下为何出现直连请求 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG Etsy 把 1000 个 MySQL 分片迁进 Vitess:425TB 数据背后的真正问题不是性能,而是运维规模 普通视频也能生成4K全景:港中文团队把“空间视频”的门槛往下拉了一大截 当 AI Agent 把调用链拉长,延迟开始成为一门生意 Tailwind CSS 4.2 的真正变化:它正在把一部分前端基础设施直接做进框架 一次推荐系统的性能瓶颈:为什么很多工程团队最终都会用上 Bloom Filter AI 写代码的时代,为什么动态语言开始显得更“便宜”了? 看外语视频神器,将本地视频通过AI技术自动生成字幕及翻译字幕 一不小心写了个免费的跨平台网络考试培训网教系统 用ASP.NET Core2重写了一款网络考试培训的免费软件 ASP.NET Core2实现静默获取微信公众号的用户OpenId ASP.NET Core2基于RabbitMQ对Web前端实现推送功能 .NET Core2使用Azure云上的Iot-Hub服务 ASP.NET Core2读写InfluxDB时序数据库 ASP.NET Core2调用Azure云上的PowerBI报表展示 利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签 在ASP.NET Core2上操作MongoDB就是能这么的简便酷爽(自动完成分库分表) ASP.NET Core2使用Autofac实现IOC依赖注入竟然能如此的优雅简便
ASP.NET Core利用拦截器 IActionFilter实现权限控制
ChatInfo · 2019-07-12 · via 博客园 - ChatInfo

迈信达网教系统”采用了前后端代码分离的架构,即“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方法内使用拦截器。

声明

本文为作者原创,转载请备注出处与保留原文地址,谢谢。如文章能给您带来帮助,请点下推荐或关注,感谢您的支持!