当前位置: 首页 > article >正文

(四)毛子整洁架构(Presentation层/Authentiacation/Authorization)


文章目录

  • 项目地址
  • 一、Presentation 层
    • 1.1 数据库migration
      • 1. 添加数据库连接字符串
      • 2. 创建自动Migration/Seed
      • 3.修改Entity添加private 构造函数
      • 4. 执行迁移
    • 1.2 全局错误处理中间件
    • 1.3 Controller 添加
      • 1. Apartments
      • 2. Bookings
      • 3. 测试
  • 二、Authentiacation
    • 2.1 添加Keycloak服务
      • 1. 配置docker-compose
      • 2. 添加Client
      • 3. 测试服务
    • 2.2 生成jwt
      • 1. 添加Jwt服务
      • 2. 创建AuthenticationOptions
      • 3. 配置JwtBearerOptions
      • 4. 测试
    • 2.3 创建注册Controller
      • 1. 创建Command
      • 2. 注册使用的接口IAuthenticationService
      • 3. 修改User实体
      • 4. 创建Handler
      • 5. 创建Controller
    • 2.4 实现Jwt服务
    • 2.5 创建User表
    • 2.6 创建登录
      • 1. 创建登录的Command
      • 2. Handler
      • 3. Jwt Service 创建
      • 4. 创建Login Controller
      • 5. 测试
  • 三、Authorization
    • 3.1 添加权限
      • 1. 添加me的controller
      • 2. 创建角色表
      • 3. 给User实例添加角色列表
      • 4. 修改Repository
      • 5. 测试
    • 3.2 添加属性控制权限


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、Presentation 层

在这里插入图片描述

1.1 数据库migration

1. 添加数据库连接字符串

2. 创建自动Migration/Seed

3.修改Entity添加private 构造函数

  1. 出现错误
    在这里插入图片描述
  2. 给Entity添加私有构造器解决

4. 执行迁移

  • 执行迁移
    在这里插入图片描述

1.2 全局错误处理中间件

1.3 Controller 添加

1. Apartments

2. Bookings

3. 测试

在这里插入图片描述

二、Authentiacation

56-70

在这里插入图片描述

2.1 添加Keycloak服务

1. 配置docker-compose

2. 添加Client

  • 这里我们通过json已经导入

3. 测试服务

2.2 生成jwt

1. 添加Jwt服务

  1. 添加授权和鉴权的中间件在program.cs

在这里插入图片描述

  1. 安装jwt包

  2. 添加服务

2. 创建AuthenticationOptions

  1. 用于配置JWT选项

  2. appsettings.json里,将该选项需要的字段

3. 配置JwtBearerOptions

  • 将AuthenticationOptions绑定

4. 测试

  1. 给之前需要认证的Controller添加认证
  2. 使用Post man,发现需要认证才可以

2.3 创建注册Controller

1. 创建Command

2. 注册使用的接口IAuthenticationService

3. 修改User实体

  • 添加身份识别ID和设置ID的方法

4. 创建Handler

5. 创建Controller

2.4 实现Jwt服务

2.5 创建User表

2.6 创建登录

1. 创建登录的Command

2. Handler

3. Jwt Service 创建

4. 创建Login Controller

5. 测试

  1. 在不登录情况下无法访问apartment接口

  2. 登录后,可以访问

在这里插入图片描述

三、Authorization

70-
在这里插入图片描述

3.1 添加权限

1. 添加me的controller

2. 创建角色表

3. 给User实例添加角色列表

  • 在创建User的时候,直接将角色添加到User表里

4. 修改Repository

  1. 自动添加角色

5. 测试

3.2 添加属性控制权限

相关文章:

(四)毛子整洁架构(Presentation层/Authentiacation/Authorization)

文章目录 项目地址一、Presentation 层1.1 数据库migration1. 添加数据库连接字符串2. 创建自动Migration/Seed3.修改Entity添加private 构造函数4. 执行迁移 1.2 全局错误处理中间件1.3 Controller 添加1. Apartments2. Bookings3. 测试 二、Authentiacation2.1 添加Keycloak服…...

K8S服务的请求访问转发原理

开启 K8s 服务异常排障过程前,须对 K8s 服务的访问路径有一个全面的了解,下面我们先介绍目前常用的 K8s 服务访问方式(不同云原生平台实现方式可能基于部署方案、性能优化等情况会存在一些差异,但是如要运维 K8s 服务,…...

5.1 神经网络: 层和块

1 层(Layer) 1.1 定义 层是深度学习模型中的基本构建单元,它由一组神经元组成,负责对输入数据进行特定的数学运算和变换,以提取数据的某种特征或表示。每一层可以看作是一个函数,它接收输入数据&#xff…...

20250510解决NanoPi NEO core开发板在Ubuntu core22.04.3系统下适配移远的4G模块EC200A-CN的问题

1、h3-eflasher-friendlycore-jammy-4.14-armhf-20250402.img.gz 在WIN10下使用7-ZIP解压缩/ubuntu20.04下使用tar 2、Win32DiskImager.exe 写如32GB的TF卡。【以管理员身份运行】 3、TF卡如果已经做过会有3个磁盘分区,可以使用SD Card Formatter/SDCardFormatterv5…...

Linux系统之----模拟实现shell

在前面一个阶段的学习中,我们已经学习了环境变量、进程控制等等一系列知识,也许有人会问,学这个东西有啥用?那么,今天我就和大家一起综合运用一下这些知识,模拟实现下shell! 首先我们来看一看我…...

2025年数维杯赛题C题专家 组委会C题专家疑集锦

1、段前段后距,行间距有要求嘛 C题专家:一般是单倍行距 2、请问参考文献和附录上方也要有图示页眉吗?ai使用报告放在附录里还是附录之后? C题专家:附录 3、第三问的那个三天都在一个城市可以吗?这样我们列两份城市的清明自由行,还是说…...

TCP黏包解决方法

1. 问题描述 TCP客户端每100ms发送一次数据,每次为16006字节的数据长度。由于TCP传输数据时,为了达到最佳传输效能,数据包的最大长度需要由MSS限定(MSS就是TCP数据包每次能够传输的最大数据分段),超过这个长度会进行自动拆包。也就是说虽然客户端一次发送16006字节数据,…...

vue访问后端接口,实现用户注册

文章目录 一、后端接口文档二、前端代码请求响应工具调用后端API接口页面函数绑定单击事件,调用/api/user.js中的函数 三、参考视频 一、后端接口文档 二、前端代码 请求响应工具 /src/utils/request.js //定制请求的实例//导入axios npm install axios import …...

[原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取自身程序的所在的目录?

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...

Nginx性能调优与深度监控

目录 1更改进程数与连接数 (1)进程数 (2)连接数 2,静态缓存功能设置 (1)设置静态资源缓存 (2)验证静态缓存 3,设置连接超时 4,日志切割 …...

机器学习第四讲:无监督学习 → 给无标签积木自由组合,发现隐藏规律

机器学习第四讲:无监督学习 → 给无标签积木自由组合,发现隐藏规律 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细…...

2025年5月计划(linux+Gpu精粹催眠+UE独立游戏)

终于步入正轨了,4月份为了各种面试,一会学这,一会学那。 现在,有大量的业余时间了,也该干点正事了。 按照规划, 1,ue独立游戏(十分钟的视频即可) 2,linux-&…...

如何在大型项目中解决 VsCode 语言服务器崩溃的问题

在大型C/C项目中,VS Code的语言服务器(如C/C扩展)可能因内存不足或配置不当频繁崩溃。本文结合系统资源分析与实战技巧,提供一套完整的解决方案。 一、问题根源诊断 1.1 内存瓶颈分析 通过top命令查看系统资源使用情况&#xff…...

从爬虫到网络---<基石9> 在VPS上没搞好Docker项目,把他卸载干净

1.停止并删除所有正在运行的容器 docker ps -a # 查看所有容器 docker stop $(docker ps -aq) # 停止所有容器 docker rm $(docker ps -aq) # 删除所有容器如果提示没有找到容器,可以忽略这些提示。 2.删除所有镜像 docker images # 查看所有镜像 dock…...

AutoDL实现端口映射与远程连接AutoDL与Pycharm上传文件到远程服务器(李沐老师的环境)

文章目录 以上配置的作用前提AutoDL实现端口映射远程连接AutoDLPycharm上传文件到远程服务器以上配置的作用 使用AutoDL的实例:因本地没有足够强的算力,所以需要使用AutoDL AutoDL端口映射:当在实例上安装深度学习的环境,但因为实例的linux系统问题,无法图形化显示d2l中的文件…...

LeetCode 热题 100 24. 两两交换链表中的节点

LeetCode 热题 100 | 24. 两两交换链表中的节点 大家好,今天我们来解决一道经典的链表问题——两两交换链表中的节点。这道题在 LeetCode 上被标记为中等难度,要求两两交换链表中的相邻节点,并返回交换后链表的头节点。 问题描述 给你一个链…...

13.thinkphp的Session和cookie

一.Session 1. 在使用Session之前,需要开启初始化,在中间件文件middleware.php; // Session 初始化 \think\middleware\SessionInit::class 2. TP6.0不支持原生$_SESSION的获取方式,也不支持session_开头的函数&…...

好用的播放器推荐

以下是一些好用的播放器推荐,按照不同平台和使用场景分类: 电脑端 VLC Media Player 特点:开源、跨平台,支持几乎所有的音视频格式,无需额外安装解码器。具备强大的功能,如播放列表管理、视频和音频滤镜、…...

多线程获取VI模块的YUV数据

一.RV1126 VI模块采集摄像头YUV数据的流程 step1:VI模块初始化 step2:启动VI模块工作 step3:开启多线程采集VI数据并保存 1.1初始化VI模块: VI模块的初始化实际上就是对VI_CHN_ATTR_S的参数进行设置、然后调用RK_MPI_VI_SetC…...

[ctfshow web入门] web68

信息收集 highlight_file被禁用了,使用cinclude("php://filter/convert.base64-encode/resourceindex.php");读取index.php,使用cinclude("php://filter/convert.iconv.utf8.utf16/resourceindex.php");可能有些乱码,不…...

深入浅出 JDBC 与数据库连接池

在Java开发中,与数据库进行交互是几乎每个项目都离不开的功能。JDBC(Java DataBase Connectivity)作为Java操作数据库的标准规范,为开发者提供了底层的数据库访问支持。而数据库连接池则是提高数据库操作效率和性能的重要工具。本…...

16前端项目----交易页

交易 交易页Trade修改默认地址商品清单reduce计算总数和总价应用 统一引入接口提交订单 交易页Trade 在computed中mapState映射出addressInfo和orderInfo&#xff0c;然后v-for渲染到组件当中 修改默认地址 <div class"address clearFix" v-for"address in …...

Python时间模块

time 和 datetime 是 Python 中处理时间的两个重要模块&#xff0c;它们提供了不同的功能来处理时间相关的操作。 time模块 time 模块主要提供与系统时间相关的基础功能&#xff0c;侧重于时间戳和简单的时间格式处理。 time.time()&#xff1a;返回当前时间的时间戳&#xf…...

2003-2020年高铁线路信息数据

2003-2020年高铁线路信息数据 1、时间&#xff1a;2003-2020年 2、来源&#xff1a;Chinese High-speed Rail and Airline Database&#xff0c;CRAD 3、指标&#xff1a;高铁线路名称、起点名、终点名、开通时间、线路长度(km)、设计速度(km/h&#xff09;、沿途主要车站 …...

mac u盘重装mac10.15Catalina系统

我的电脑提mac2017的air 重装过程 (文件夹中间有空格时为 Install\ macOS\ Catalina 才行) &#xff08;有需要的&#xff0c;最好做一下备份&#xff0c;有些东西可以及时找到配置和文件之类的&#xff0c; u盘制作是在mac电脑上操作的) 一、先下载系统镜像文件或自行到官方…...

MySQL COUNT(*) 查询优化详解!

目录 前言1. COUNT(*) 为什么慢&#xff1f;—— InnoDB 的“计数烦恼” &#x1f914;2. MySQL 执行 COUNT(*) 的方式 (InnoDB)3. COUNT(*) 优化策略&#xff1a;快&#xff01;准&#xff01;狠&#xff01;策略一&#xff1a;利用索引优化带 WHERE 子句的 COUNT(*) (最常见且…...

nginx配置协议

1. 7层协议 OSI&#xff08;Open System Interconnection&#xff09;是一个开放性的通行系统互连参考模型&#xff0c;他是一个定义的非常好的协议规范&#xff0c;共包含七层协议。直接上图&#xff0c;这样更直观些&#xff1a; 1.1 协议配置 1.1.1 7层配置 这里我们举例…...

自动化创业机器人:现状、挑战与Y Combinator的启示

自动化创业机器人&#xff1a;现状、挑战与Y Combinator的启示 前言 AI驱动的自动化创业机器人&#xff0c;正逐步从科幻走向现实。我们设想的未来是&#xff1a;商业分析、PRD、系统设计、代码实现、测试、运营&#xff0c;全部可以在monorepo中由AI和人类Co-founder协作完成…...

Activity动态切换Fragment

Activity 动态切换 Fragment 是 Android 开发中常见的需求&#xff0c;用于构建灵活的用户界面。 以下是实现 Activity 动态切换 Fragment 的几种方法&#xff0c;以及一些最佳实践&#xff1a; 1. 使用 FragmentManager 和 FragmentTransaction (推荐) 这是最常用和推荐的方…...

UE5 PCG学习笔记

https://www.bilibili.com/video/BV1onUdY2Ei3/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 一、安装PCG 插件里选择以下进行安装 移动目录后&#xff0c;可以使用 Update Redirector References&#xff0c;更新下&#xff0…...