【Abp.VNext】Abp.Vnext框架模块学习

1、Abp.Vnext-集成

Volo.Abp.Core

2、Abp.vNext-Web模块

Volo.Abp.AspNetCore.MVC

框架(framework文件夹)

七、Abp.vNext-应用模块-Identity身份认证

业务模块(modules文件夹->identity)

1、添加领域模型
Volo.Abp.Identity.Domain
typeof(AbpIdentityDomainMoule)

核心 IdentityUser模型类

2、实体框架:生成相应的表(生成迁移文件,生成对应的表)

1、集成

  • (1)、添加实体框架
Volo.Abp.Identity.EntityFrameworkCore
typeof(AbpIdentityEntityFrameworkCoreModule)
  • (2)、重写 OnModelCreating
 /// <summary>///  根据模型创建迁移文件。进一步创建表/// </summary>/// <param name="modelBuilder"></param>protected override void OnModelCreating(ModelBuilder builder){// 1、根据Identity 生成对应的数据库迁移文件。AbpIdentityDbProperties.DbTablePrefix = "Sys_";builder.ConfigureIdentity();
}
dotnet ef migrations add 迁移文件名称 -c 指定上下文
dotnet ef database update

会生成

1、abpusers #用户表
2、abproles #角色表
3...
  • (3)、集成Application
Volo.Abp.Identity.Application
typeof(AbpIdentityApplicationModule),
  • (4)、集成WebApi (自动添加Controller
Volo.Abp.Identity.HttpApi
typeof(AbpIdentityHttpApiModule),

启动会报错:报权限错误(因为:[Authorize(IdentityPermissions.Users.Default)] 代表有权限才能调用)
需要引用权限模块(因为引用了权限模块的EfCore : Volo.Abp.PermissionManagement.EntityFrameworkCore

Volo.Abp.PermissionManagement.EntityFrameworkCore
typeof(AbpPermissionManagementEntityFrameworkCoreModule)

多了Role(角色)、User(用户)、UserLookUp(向上查找、搜索用户用的) 三个模块

添加身份认证权限,否则调用添加用户会报错权限问题

// 10、添加身份认证
context.Services.AddAuthentication().AddCookie();// 11、添加权限校验
context.Services.AddAuthorization();// 12、去掉所有的权限
context.Services.AddAlwaysAllowAuthorization();

注意:需要先添加角色,否则会报 角色字符串不存在。,然后再调用创建用户接口 才会成功!

1、ConfigureAwait(false) 是一种优化手段,确保异步操作完成后不会强制切换回原始上下文,通常用于提升性能并避免死锁风险。2、.ToListAsync(cancellationToken: cancellationToken) 的作用是:异步执行查询,将结果转为 List<T>。
支持取消,通过 CancellationToken 实现可控的中断机制。
在你的代码中,它高效地加载了用户与组织单元角色的关联数据,同时允许外部控制查询的生命周期。

它有自己的数据库上下文 IdentityDbContext ,这个模块用的也是自己的数据库上下文。

2、自定义框架
(1)、自定义表前缀(EbusinessModule)

 public override void ConfigureServices(ServiceConfigurationContext context){// 13、identity身份模块访问新前缀AbpIdentityDbProperties.DbTablePrefix = "Sys_";
}/// <summary>
///  根据模型创建迁移文件。进一步创建表(ABPEbusinessContext)
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder builder)
{// 1、根据Identity 生成对应的数据库迁移文件。AbpIdentityDbProperties.DbTablePrefix = "Sys_";
}

不建议改源码 表的后缀

(2)、自定义用户模型、

/// <summary>
/// (1)、用户自定义字段
/// </summary>
public class SysUser : IdentityUser
{public string CreateTony { set; get; }
}public DbSet<SysUser> sys_users { set; get; }/// <summary>/// (2.1)用户自定义仓储 用来实现abp提供的仓储/// </summary>public interface IUserABPRepository : IRepository<SysUser, Guid>{Task<SysUser> FindByNormalizedUserNameAsync([NotNull] string normalizedUserName,bool includeDetails = true,CancellationToken cancellationToken = default);...}/// <summary>/// (2.2)用户仓储自定义实现/// </summary>[Dependency(ServiceLifetime.Singleton)]public class UserABPRepository : EfCoreRepository<ABPEbusinessContext, SysUser, Guid>, IUserABPRepository{public UserABPRepository(IDbContextProvider<ABPEbusinessContext> dbContextProvider) : base(dbContextProvider){}
...
}//3. 改动dto/// <summary>/// 4.1 用户自定义service/// </summary>public interface IUserABPService : ICrudAppService<SysUserDto,Guid,GetSysUserInput,SysUserCreateDto,SysUserUpdateDto>{Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id);
}/// <summary>/// 4.2 用户service自定义实现/// </summary>[Dependency(ServiceLifetime.Singleton)]//[Authorize]public class UserABPService : CrudAppService<SysUser,SysUserDto,Guid,GetSysUserInput,SysUserCreateDto,SysUserUpdateDto>, IUserABPService, IRemoteService{public UserABPService(IUserABPRepository userABPRepository) : base(userABPRepository){}public Task<SysUserDto> FindByEmailAsync(string email){throw new NotImplementedException();}
}/// <summary>
/// 5、使用:配置自定义映射类型。dto---->实体,
/// </summary>
public class EbusinessAutoMapperProfile : Profile
{public EbusinessAutoMapperProfile(){// 1、具体类型映射配置CreateMap<ProductDto, Product>();// 2、配置实体到dto的类型CreateMap<Product, ProductDto>();CreateMap<SysUser,SysUserDto>().ReverseMap();}
}/// <summary>/// 6、用户自定义字段/// </summary>public class SysUserDto : ExtensibleFullAuditedEntityDto<Guid>, IMultiTenant, IHasConcurrencyStamp, IHasEntityVersion{public string CreateTony { set; get; }public Guid? TenantId { get; set; }public string UserName { get; set; }public string Name { get; set; }public string Surname { get; set; }public string Email { get; set; }public bool EmailConfirmed { get; set; }public string PhoneNumber { get; set; }public bool PhoneNumberConfirmed { get; set; }public bool IsActive { get; set; }public bool LockoutEnabled { get; set; }public DateTimeOffset? LockoutEnd { get; set; }public string ConcurrencyStamp { get; set; }public int EntityVersion { get; set; }}
八、Abp.vNext-应用模块-Account账户模块

系统提供的登录和注册

  • 注册:将用户信息存储到数据库
  • 登录:将用户信息存储到Cookie内存。

缺少Domain(领域层)、EFCore层

//集成应用模块,account账户模块
typeof(AbpAccountApplicationModule),
typeof(AbpAccountHttpApiModule),
typeof(AbpAccountWebModule)
九、Abp.vNext-应用模块-Permission权限模块
abppermission

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92881.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【完整源码+数据集+部署教程】火柴实例分割系统源码和数据集:改进yolo11-rmt

背景意义 研究背景与意义 在计算机视觉领域&#xff0c;实例分割技术作为一种重要的图像处理方法&#xff0c;近年来得到了广泛的关注和应用。实例分割不仅能够识别图像中的物体类别&#xff0c;还能精确地分割出每个物体的轮廓&#xff0c;提供更为细致的视觉信息。这一技术在…

飞算JavaAI云原生实践:基于Docker与K8s的自动化部署架构解析

一、飞算JavaAI详细介绍 1.1 飞算JavaAI飞算JavaAI是飞算云智推出的一款革命性Java开发辅助工具&#xff0c;它通过人工智能技术深度赋能传统软件开发流程&#xff0c;特别为大学生课程设计、毕业设计等实践教学环节提供了强有力的技术支持。在当前高校计算机相关专业教学中&am…

小程序打通美团核销:解锁到店综合业态私域密码,赋能6000+门店破局增长

数字化浪潮奔涌而来&#xff0c;棋牌室、台球厅、亲子乐园等线下综合业态面临经营转型的关键节点。小程序与美团核销功能的深度耦合&#xff0c;正成为撬动私域流量的核心杠杆&#xff0c;为超6000家门店打通了一条低成本、高转化的经营快车道。过往经营模式中&#xff0c;线上…

Linux Shell:Nano 编辑器备忘

打开文件 sudo nano /etc/apt/sources.list选中多行&#xff0c;然后删除 用方向键将光标定位到要删除的起始位置按下 Alt A 设置锚点用方向键选择要删除的区域 (以上 3 步是为了选中文本)用 Ctrl K(剪切) 或 Alt D(直接删除) 全选并删除 按下 Alt \ 将光标移动到文件开头…

常见的设计模式(2)单例模式

目录 一、版本一&#xff1a;禁用构造与拷贝 二、版本二&#xff1a;注册析构函数/嵌套垃圾回收 &#xff08;1&#xff09;使用atexit注册程序结束时的函数 &#xff08;2&#xff09;使用对象嵌套垃圾回收 三、版本三&#xff1a;线程安全 四、版本四&#xff1a;编译器…

JAiRouter 0.2.1 更新啦:内存优化 + 配置合并 + IP 限流增强,运维体验再升级

JAiRouter 0.2.1 更新啦&#xff1a;内存优化 配置合并 IP 限流增强&#xff0c;运维体验再升级 如果你已经在 0.2.0 生产环境中稳定运行&#xff0c;那么这篇更新会让你无痛升级&#xff0c;直接“更轻、更稳、更省心”。 &#x1f4ce; 官方仓库 & issue 直达 https://…

学习嵌入式第二十六天

文章目录IO(续上)1.标准IO1.标准IO的接口2.流的定位2.文件IO1.概念&#xff1a;2.系统调用和库函数3.文件IO函数接口习题IO(续上) 1.标准IO 1.标准IO的接口 fwrite 原型&#xff1a;size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream); 功能&#xff1…

GDB 程序启动参数设置深度指南

GDB 程序启动参数设置深度指南 1. 概述 在程序调试过程中&#xff0c;正确设置启动参数对于验证程序行为、重现特定场景至关重要。GDB提供多种灵活的方式设置启动参数&#xff0c;特别是当您需要调试命令行参数处理逻辑或配置敏感型应用时。 2. 参数设置的核心方法 2.1 启动GDB…

Autudl华为昇腾系列NPU简介和部署推理yolo11 yolov8 yolov5分割模型

0.配置Autudl 下面图片是我所租的昇腾卡和具体环境版本&#xff0c;太具体的就不说了&#xff0c;有需要的话我单独出一期Autudl租显卡的教程&#xff0c;主要是为了学习昇腾环境如何运行Yolo系列模型。 0.1华为昇腾芯片&#xff08;Ascend&#xff09;简介 1.Ascend 310&…

什么是JSP和Servlet以及二者的关系

JSP&#xff08;JavaServer Pages&#xff09; 是“HTML 里写 Java”的模板技术&#xff0c;最终会被容器转换成 Servlet。Servlet 是“Java 里写 HTML”的 Java 类&#xff0c;直接继承 javax.servlet.http.HttpServlet&#xff0c;用来接收/响应 HTTP 请求。Servlet 是什么 纯…

【WonderTrader源码详解 1】【环境搭建 2】【编译安装WonderTrader】

一、引言 本篇来讲述如何搭建 wondertrader 和 wtpy 二、wondertrader 2.1 源码下载 # /home/leo/sda_1.6TBgit clone https://gitee.com/wondertrader/wondertrader.gitgit clone https://gitee.com/wondertrader/wtpy.git2.2 源码编译 cd /home/leo/sda_1.6TB/wondertrader/s…

hutool 作为http 客户端工具调用的一点点总结

场景一&#xff1a;客户端timeout 的时间给的很短//100毫秒 private static final int HTTP_TIMEOUT_MS 1 * 100; response HttpUtil.createPost(patrolresultconfirmUrl).body(JSONObject.toJSONString(search)).header("Authorization", token).timeout(HTTP_TI…

基于MongoDB/HBase的知识共享平台的设计与实现

标题:基于MongoDB/HBase的知识共享平台的设计与实现内容:1.摘要 在当今信息爆炸的时代&#xff0c;知识的有效共享和管理变得愈发重要。本研究的目的是设计并实现一个基于MongoDB/HBase的知识共享平台&#xff0c;以满足大规模知识数据的存储、高效查询和快速共享需求。方法上&…

PHP数组操作:交集、并集和差集

1. 交集&#xff08;Intersection&#xff09;交集是指两个集合中都存在的元素。$array1 [1, 2, 3, 4]; $array2 [3, 4, 5, 6];$intersection array_intersect($array1, $array2); print_r($intersection); // 输出: Array ( [2] > 3 [3] > 4 )2. 并集&#xff08;Uni…

Qt 常用控件 - 7

Text Edit&#xff08;多行输入框&#xff09;QTextEdit 表示多行输入框&#xff0c;也是一个富文本 & markdown 编辑器&#xff0c;能在内容超出范围时自动提供滚动条。QTextEdit&#xff1a;不仅仅能表示纯文本&#xff0c;还可以表示 htnl 和 markdownQPlainTextEdit&am…

JDK、eclipse的安装,配置JDK、Tomcat并使用eclipse创建项目

目录一、JDK的安装1. 安装JDK2. 配置环境变量3. 检查jdk是否已安装二、eclipse的安装1. 解压安装2. 设置字体大小3. 设置拼写提示三、tomcat安装四、创建项目1. 第一次创建一个普通的java项目2. 第一次创建一个java web项目扩展&#xff1a;运行项目报Tomcat端口占用&#xff0…

Iptables 详细使用指南

目录 1. 工作原理​ 2. 核心架构&#xff08;四表五链&#xff09; 2.1 四张表&#xff08;优先级从高到低&#xff09; 2.2 五条内置链&#xff08;数据包流向&#xff09; 3. Iptables规则 3.1 规则的匹配条件与目标动作 常见匹配条件&#xff08;用于筛选数据包&…

Vue 服务端渲染(SSR)详解

Vue SSR是一种在服务端将 Vue 应用渲染成 HTML 字符串&#xff0c;然后直接发送到客户端的技术。相比传统的客户端渲染&#xff0c;Vue SSR 能带来更好的 SEO 性能和更快的首屏加载时间。下面我们从零到一&#xff0c;结合项目源码&#xff0c;详细讲解如何实现一个 Vue SSR 项…

机器翻译:需要了解的数学基础详解

文章目录一、概率论与统计学1.1 基本概念1.2 在机器翻译中的应用二、线性代数2.1 基本概念2.2 在机器翻译中的应用三、微积分3.1 基本概念3.2 在机器翻译中的应用四、信息论4.1 基本概念4.2 在机器翻译中的应用五、数值优化5.1 优化问题形式化5.2 优化算法5.3 正则化技术六、图…

蓝桥杯手算题和杂题简易做法

一、巧用Excel Excel在解决某些数学问题时非常高效&#xff0c;特别是涉及表格计算、简单统计和可视化分析时。 门牌制作 这道题是一道基础题&#xff0c;只需要判断每个数字有几个2&#xff0c;然后在加起来即可&#xff0c;但是还有更简单的方法&#xff0c;先通过编译器&…