首页 > 其他分享 >自定义 AuthorizationMiddleware 的行为

自定义 AuthorizationMiddleware 的行为

时间:2024-04-18 12:13:00浏览次数:42  
标签:自定义 AuthorizationMiddleware IAuthorizationMiddlewareResultHandler dbContext cont

在其它角色、策略权限验证后,系统再执行中间件,中间件成功后,最后才执行调用控制器方法。

其它策略-》授权中间件-》控制器方法

应用可以注册 IAuthorizationMiddlewareResultHandler,以自定义 AuthorizationMiddleware 处理授权结果的方式。 应用可将 IAuthorizationMiddlewareResultHandler 用于:

  • 返回自定义的响应。
  • 增强默认质询或禁止响应。
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Authorization.Policy;
using TestIdentity.Infrastructure.Data;

namespace TestIdentity.Web.CustomIdentity;

public class SampleAuthorizationMiddlewareResultHandler : IAuthorizationMiddlewareResultHandler
{

  AppDbContext dbContext;
  private readonly IAuthorizationMiddlewareResultHandler defaultHandler;

  public SampleAuthorizationMiddlewareResultHandler(AppDbContext dbContext)
  {
    this.dbContext = dbContext;
    this.defaultHandler = new AuthorizationMiddlewareResultHandler();
  }

  public async Task HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
  {
    // If the authorization was forbidden and the resource had a specific requirement,
    // provide a custom 404 response.
    if (authorizeResult.Forbidden
        && authorizeResult.AuthorizationFailure!.FailedRequirements
            .OfType<Show404Requirement>().Any())
    {
      // Return a 404 to make it appear as if the resource doesn't exist.
      context.Response.StatusCode = StatusCodes.Status404NotFound;
      return;
    }


    var project = dbContext.Projects.FirstOrDefault(m => m.Name == "admin");
    if (project == null)
    {
      context.Response.StatusCode = StatusCodes.Status203NonAuthoritative;
      return;
    }

    // Fall back to the default implementation.
    await defaultHandler.HandleAsync(next, context, policy, authorizeResult);
  }

  public class Show404Requirement : IAuthorizationRequirement { }
}

  

builder.Services.AddSingleton<IAuthorizationMiddlewareResultHandler,SampleAuthorizationMiddlewareResultHandler>();

  

标签:自定义,AuthorizationMiddleware,IAuthorizationMiddlewareResultHandler,dbContext,cont
From: https://www.cnblogs.com/friend/p/18143249

相关文章

  • 『手撕Vue-CLI』自定义指令
    前言最近一直忙于工作项目上面的事情,精力少了很多,所以一直没更文,很多技术点,都做在我自己的Notion笔记库中,今天,我决定要改变一下方式,所以又重新来更文了。在前面的章节中已经分享了VueRouter,实现了VueRouter之后,到此为止,Vue,Vuex,VueRouter就都已经搞定了。到这里,大家应该......
  • .net 通过特性及继承IValidatableObject完成自定义表单验证
    Model:publicclassPartAItem:IValidatableObject{[Required]publicstringTOKEN{get;set;}[Required]publicstringPROJECT_ID{get;set;}publicstringPART{get;set;}[Required]publicstringFORM_ID{get;set;......
  • ContextMenu【自定义】
    ContextMenu样式对应的xaml代码: <ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><StyleTargetType="{x:Type......
  • 自定义pre-commit 开发格式简单说明
    内容来自官方文档,主要是简单说明下,方便学习约定git项目需要包含.pre-commit-hooks.yaml文件,里边内容格式如下-id:trailing-whitespacename:TrimTrailingWhitespacedescription:Thishooktrimstrailingwhitespace.entry:trailing-w......
  • 自定义 ls 颜色输出
    直接上配置LS_COLORS='rs=0:di=00;34:ln=01;36:mh=00:pi=00;33:so=01;35:do=01;35:bd=00;33;01:cd=00;33;01:or=00;31;01:mi=00:su=33;31:sg=36;33:ca=00:tw=36;32:ow=34;32:st=33;34:ex=00;36:*.7z=01;31:*.ace=01;31:*.alz=01;31:*.apk=01;31:*.arc=01;31:*.arj=01;31:*.bz......
  • HarmonyOS NEXT应用开发案例——自定义TabBar
    介绍本示例主要介绍了TabBar中间页面如何实现有一圈圆弧外轮廓以及TabBar页签被点击之后会改变图标显示,并有一小段动画效果。效果图预览使用说明:依次点击tabBar页面,除了社区图标之外,其它图标往上移动一小段距离。实现思路场景1:TabBar中间页面实现有一圈圆弧外轮廓将Imag......
  • codegen的模板文件mustache中配置在swagger规范文档中自定义属性
    在使用swagger-codegen生成代码时,我们经常需要使用自定义属性来生成我们需要的代码。swagger-codegen使用了mustache模板引擎来生成代码,而在mustache模板文件中,我们可以通过配置swagger规范文档中的自定义属性来生成我们需要的代码。本篇文章将从第三级标题开始,详细介绍如何在swag......
  • 导入自定义板块的方法
         ......
  • EasyExcel 自定义宽高
    packagecom.cloud.module.management.common.handler;importcn.hutool.core.util.ObjectUtil;importcom.alibaba.excel.enums.CellDataTypeEnum;importcom.alibaba.excel.metadata.Head;importcom.alibaba.excel.metadata.data.CellData;importcom.alibaba.excel.......
  • layUI Table自定义工具栏和搜索参数
    layUITable自定义工具栏和搜索参数视频讲解地址https://www.bilibili.com/video/BV1P94y197nNHTML代码<divclass="container-fluid"><tableclass="layui-hide"id="test"lay-filter="test"></table></div><s......