ASP.NET Core 下自定义权限验证
效果图:


如果没有权限时,显示:

代码:
public class AuthorizeAdminAttribute : TypeFilterAttribute
{
#region 字段 private readonly bool _ignoreFilter; #endregion #region 构造函数 /// <summary>
/// 构造函数
/// </summary>
/// <param name="ignore">是否忽略过滤。默认为false</param>
public AuthorizeAdminAttribute(bool ignore = false) : base(typeof(AuthorizeAdminFilter))
{
this._ignoreFilter = ignore;
this.Arguments = new object[] { ignore };
} #endregion #region 属性 /// <summary>
/// 获取是否忽略过滤?
/// </summary>
public bool IgnoreFilter => _ignoreFilter; #endregion #region 内部过滤器 /// <summary>
/// 管理员授权过滤器
/// </summary>
private class AuthorizeAdminFilter : IAuthorizationFilter
{
#region 字段 private readonly bool _ignoreFilter;
//private readonly IPermissionService _permissionService;
//假设这个 IPermissionService 是我们业务上需要访问数据库获取用户是否有权限访问的类。 #endregion #region 构造函数 public AuthorizeAdminFilter(bool ignoreFilter /*, IPermissionService permissionService*/ )
{
this._ignoreFilter = ignoreFilter;
//this._permissionService = permissionService;
} #endregion #region 方法 public void OnAuthorization(AuthorizationFilterContext filterContext)
{
if (filterContext == null)
throw new ArgumentNullException(nameof(filterContext)); //检查是否已经被 Action 方法重写了
var actionFilter = filterContext.ActionDescriptor.FilterDescriptors
.Where(filterDescriptor => filterDescriptor.Scope == FilterScope.Action)
.Select(filterDescriptor => filterDescriptor.Filter).OfType<AuthorizeAdminAttribute>().FirstOrDefault(); if (actionFilter?.IgnoreFilter ?? _ignoreFilter)
return; if (filterContext.Filters.Any(filter => filter is AuthorizeAdminFilter))
{
//下面是访问自定义的服务,获取当前登录用户是否有权限访问
//bool hasPermission = _permissionService.Authorize(StandardPermissionProvider.AccessAdminPanel);
bool hasPermission = new Random().Next(, ) > ? true : false;
if (!hasPermission)
filterContext.Result = new ChallengeResult();
}
} #endregion
} #endregion
}
使用方法:

谢谢浏览!
ASP.NET Core 下自定义权限验证的更多相关文章
- ASP.NET Core 下自定义模型绑定,去除字符串类型前后的空格
效果图: 01 02 直接贴代码了: NoTrim public class NoTrimAttribute : Attribute { } 我们自定义的模型绑定提供程序 /// <summar ...
- ASP.NET Core - 实现自定义WebApi模型验证
Framework时代 在Framework时代,我们一般进行参数验证的时候,以下代码是非常常见的 [HttpPost] public async Task<JsonResult> Sav ...
- ASP.Net Core下Authorization的几种方式 - 简书
原文:ASP.Net Core下Authorization的几种方式 - 简书 ASP.Net Core下Authorization的几种方式 Authorization其目标就是验证Http请求能否 ...
- asp.net core根据用户权限控制页面元素的显示
asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelp ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- ASP.NET Core Identity自定义数据库结构和完全使用Dapper而非EntityFramework Core
前言 原本本节内容是不存在的,出于有几个人问到了我:我想使用ASP.NET Core Identity,但是我又不想使用默认生成的数据库表,想自定义一套,我想要使用ASP.NE Core Identi ...
- asp.net core 3.x 身份验证-3cookie身份验证原理
概述 上两篇(asp.net core 3.x 身份验证-1涉及到的概念.asp.net core 3.x 身份验证-2启动阶段的配置)介绍了身份验证相关概念以及启动阶段的配置,本篇以cookie身份 ...
- Asp.net core下利用EF core实现从数据实现多租户(1)
前言 随着互联网的的高速发展,大多数的公司由于一开始使用的传统的硬件/软件架构,导致在业务不断发展的同时,系统也逐渐地逼近传统结构的极限. 于是,系统也急需进行结构上的升级换代. 在服务端,系统的I/ ...
- Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作
前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...
随机推荐
- VMware端口映射配置步骤
1:编辑->虚拟网络编辑器 2:点击NAT模式-->NAT设置 3:注意:主机端口就是物理机的端口,虚拟机就是wmware中的系统 点击添加
- jquery删除内容是动态修改序号
如图,点击删除图标的时候要删除当前的一条记录,同时界面上的序号要动态的排列好 以下是html结构: jquery实现思路: 首先,需要获取到当前要删除盒子的序号$indexCur,然后遍历父盒子,取出 ...
- ASP.NET Core Web API 集成测试
本文需要您了解ASP.NET Core Web API 和 xUnit的相关知识. 这里有xUnit的介绍: https://www.cnblogs.com/cgzl/p/9178672.html#t ...
- GC参考手册 —— GC 算法(基础篇)
本章简要介绍GC的基本原理和相关技术, 下一章节再详细讲解GC算法的具体实现.各种垃圾收集器的实现细节虽然并不相同,但总体而言,垃圾收集器都专注于两件事情: 查找所有存活对象 抛弃其他的部分,即死对象 ...
- 基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
今天我们来盘一盘Socket通讯和WebSocket协议在即时通讯的小应用——聊天. 理论大家估计都知道得差不多了,小编也通过查阅各种资料对理论知识进行了充电,发现好多demo似懂非懂,拷贝回来又运行 ...
- python -使用del语句删除对象引用
使用del语句删除一些对象引用. 注意不是把内存地址删了,你只是删除了引用,它就变为了一个可回收的对象,内存会不定期回收. del语句的语法是: del var1[,var2[,var3[....,v ...
- Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解
一,私有属性和方法 私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用. <script> /* * 私有方法:私有方法本身是可 ...
- C# 提前异步加载数据
前言 在我们应用程序中,如果有较大的数据需要从数据库或者本地读取,且是一次性的话,可以提前获取数据并缓存在内存中. 一般处理方法:利用应用程序启动到用户使用功能这一段时间,提前加载数据. 问题来了,因 ...
- 简简单单的Vue2(简单语法,生命周期,组件)
既然选择了远方,便只顾风雨兼程! __HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 简单入手 组件 在上面文章,我们简单的讲了前端框架的工程化,也就是MVVM,还有特别聊 ...
- axios+Vue上传文件显示进度
一,前言 最近在用Vue,然后上传文件时需要显示进度,于是网上搜了一下,经过自己实测终于也弄明白了 二,效果 三,代码 HTML代码 <div id="app"> &l ...