麦荻网教系统”采用了前后端代码分离的架构,即“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方法内写入业务代码。具体代码如下:

 namespace Miidy.Cloud.Provider
{
/// <summary>
/// 该过虑器提供给所有对外的RestApi接口使用
/// 在有需要验证每个接口/方法是否只为管理人员用户调用时使用
/// 方法级别的过率器
/// </summary>
public class ManageVerifyAttribute : Attribute, IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
} /// <summary>
/// 判断用户是否为管理角色,不是则抛出异常
/// </summary>
/// <param name="context"></param>
public void OnActionExecuting(ActionExecutingContext context)
{
if (context.HttpContext.User.Identity.IsAuthenticated)
{
var roleType = int.Parse(context.HttpContext.User.Claims.First(c => c.Type == "roleType").Value);
//不是管理人员
if (roleType <= 0 || roleType >= 4)
{
context.Result = new JsonResult(new Result(214));
}
}
else
context.Result = new JsonResult(new Result(214));
} }
}

2、在Web Api的方法内打上[ManageVerify]属性,即可完成拦截器的功能实现了,具体如下:

 /// <summary>
/// 同步单个数据,数据不存在则增加,否则修改
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[Route("SynchrDataByModel")]
[HttpPost]
[ManageVerify]
public async Task<Result> SynchrDataByModel(MC_Ware model)
{
var resul = await _WareCore.SynchrDataAsync(new List<MC_Ware> { model });
if (resul <= 0)
return new Result(211);
return new Result(200);
}

总结

1、基于“IActionFilter”接口来实现请求的拦截。

2、基于“Attribute”属性特性可帮助我们可以按需在指定WebApi方法内使用拦截器。

声明

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

ASP.NET Core利用拦截器 IActionFilter实现权限控制的更多相关文章

  1. ASP.NET MVC案例——————拦截器

    摘要      本文将对“MVC公告发布系统”的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法. 一个小难题      我们继续完善“MVC公告发布系统”, ...

  2. Mybatis利用拦截器做统一分页

    mybatis利用拦截器做统一分页 查询传递Page参数,或者传递继承Page的对象参数.拦截器查询记录之后,通过改造查询sql获取总记录数.赋值Page对象,返回. 示例项目:https://git ...

  3. 【Java EE 学习 75 下】【数据采集系统第七天】【二进制运算实现权限管理】【使用反射初始化权限表】【权限捕获拦截器动态添加权限】

    一.使用反射动态添加权限 在该系统中,我使用struts2的时候非常规范,访问的Action的形式都是"ActionClassName_MethodName.action?参数列表" ...

  4. JavaWeb -- Struts 自定义拦截器, 登录权限拦截

    1. 自定义拦截器, 登录权限拦截 login.jsp 登录JSP <%@ page language="java" contentType="text/html; ...

  5. 在ASP.NET MVC中实现基于URL的权限控制

    本示例演示了在ASP.NET MVC中进行基于URL的权限控制,由于是基于URL进行控制的,所以只能精确到页.这种权限控制的优点是可以在已有的项目上改动极少的代码来增加权限控制功能,和项目本身的耦合度 ...

  6. ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中

    我们在ASP.NET Core MVC项目中有如下HomeController: using Microsoft.AspNetCore.Mvc; namespace AspNetCoreActionF ...

  7. ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值

    用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器.最近才发现IActionFilter的OnActionExecuting方法,甚 ...

  8. SpringMVC利用拦截器防止SQL注入

    引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...

  9. asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User

    前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cooki ...

随机推荐

  1. Notepad++新建文件设置默认的换行符

    选择[Settings]-[Preferences]-[New Documnet]

  2. DB2使用MERGE INTO语句实现西虹市首富的新增及更新操作

    首先我们新建一张名为XIHONGSHISHOUFU的表,这张表是评委会初步评选出的西虹市首富的候选人员,下面的SQL语句包含建表和插入数据的部分: CREATE TABLE XIHONGSHISHOU ...

  3. [转]Connecting To SQLite Database Using Node.js

    原文链接:http://www.sqlitetutorial.net/sqlite-nodejs/connect/

  4. 【JQuery插件】团购倒计时

    案例截图 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3. ...

  5. Node.js Sequelize如何实现数据库的读写分离

    一.前言 在构建高并发的Web应用时,除了应用层要采取负载均衡方案外,数据库也要支持高可用和高并发性.使用较多的数据库优化方案是:通过主从复制(Master-Slave)的方式来同步数据,再通过读写分 ...

  6. 【计算机视觉】目标检测之ECCV2016 - SSD Single Shot MultiBox Detector

    本文转载自: http://www.cnblogs.com/lillylin/p/6207292.html SSD论文阅读(Wei Liu--[ECCV2016]SSD Single Shot Mul ...

  7. 使用Wifi pineapple(菠萝派)进行Wi-Fi钓鱼攻击

    简介: WiFi Pineapple 是由国外无线安全审计公司Hak5开发并售卖的一款无线安全测试神器. 特性: 用作 Wi-Fi 中间人攻击测试平台 一整套的针对 AP 的渗透测试套件 基于 WEB ...

  8. LeetCode 442. 数组中重复的数据(Find All Duplicates in an Array) 17

    442. 数组中重复的数据 442. Find All Duplicates in an Array 题目描述 Given an array of integers, 1 ≤ a[i] ≤ n (n ...

  9. MySQL引擎类型(三)

    InnoDB: 1)经常更新的表,适合处理多重并发的更新请求. 2)支持事务. 3)可以从灾难中恢复(通过bin-log日志等). 4)外键约束.只有他支持外键. 5)支持自动增加列属性auto_in ...

  10. [#] - .Net平台的实时性能监控

    App Metricshttps://www.app-metrics.io ASP.NET Core之跨平台的实时性能监控http://www.cnblogs.com/GuZhenYin/p/7170 ...