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

【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.dtcms.com/a/329070.html

相关文章:

  • 工业元宇宙:迈向星辰大海的“玄奘之路”
  • TCP客户端Linux网络编程设计详解
  • docker+nginx+keepalived+openappsec+web ui+crowdsec部署安全代理
  • IDEA创建一个VUE项目
  • SVN提交服务器拒绝访问的问题
  • 服务器硬件电路设计之 I2C 问答(五):I2C 总线数据传输方向如何确定、信号线上的串联电阻有什么作用?
  • 从零开始搭建私服务器
  • opencv:直方图
  • 【AI论文】GLM-4.5:具备智能体特性、推理能力与编码能力的(ARC)基础模型
  • Visual Studio Code 跨平台快捷键指南:Windows 与 macOS 全面对比
  • 第十三节:后期处理:效果增强
  • 开发避坑指南(24):RocketMQ磁盘空间告急异常处理,CODE 14 “service not available“解决方案
  • 2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
  • python基于Hadoop的超市数据分析系统
  • 高防CDN和高防IP的各自优势
  • Sklearn 机器学习 异常值检测 孤立深林
  • 《设计模式之禅》笔记摘录 - 15.观察者模式
  • 【完整源码+数据集+部署教程】军事伪装目标分割系统源码和数据集:改进yolo11-EMSC
  • 最新去水印小程序系统 前端+后端全套源码 多套模版 免授权
  • Four.Meme 重大更新:Bonding Curve Cap 从 24 BNB 降至 18 BNB,这意味着什么?
  • 浏览器面试题及详细答案 88道(23-33)
  • 【密码学实战】国密SM2算法介绍及加解密/签名代码实现示例
  • 用了Cursor AI之后,我的编程效率翻倍了?——一位程序员的真实体验分享
  • Java毕业设计选题推荐 |基于SpringBoot的水产养殖管理系统 智能水产养殖监测系统 水产养殖小程序
  • 二层业务端口相关配置
  • STM32H743开发周记问题汇总(串口通讯集中)
  • 免费生成视频,Coze扣子工作流完全免费的视频生成方案,实现图生视频、文生视频
  • Windows 系统 上尝试直接运行 .sh(Shell 脚本)文件
  • 从感知到执行:人形机器人低延迟视频传输与多模态同步方案解析
  • 基于大数据spark的医用消耗选品采集数据可视化分析系统【Hadoop、spark、python】