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