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 mvc 5 利用ActionFilterAttribute实现权限过滤
- .NET WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制
- Asp.net下使用HttpModule模拟Filter,实现权限控制
- ASP.NET MVC使用ActionFilterAttribute实现权限限制的方法(附demo源码下载)
- Asp.net下使用HttpModule模拟Filter,实现权限控制
- ASP.NET MVC 利用ActionFilterAttribute来做权限等
- Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
- ASP.NET MVC 利用ActionFilterAttribute来做权限等
- ASP.NET MVC 利用ActionFilterAttribute来做权限等
- ASP.NET MVC 利用ActionFilterAttribute来做权限等
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter
- Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET Core2利用Jwt技术在服务端实现对客户端的身份认证
- asp.net MVC利用ActionFilterAttribute过滤关键字的方法
- ASP.NET MVC 中如何实现基于角色的权限控制
- 利用ResultFilter实现asp.net mvc 页面静态化
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
- ASP.NET 实现简单的权限控制