如何在Abp.io中恢复软删除的Identity User(无原服务权限)
恢复软删除的IdentityUser记录(无官方应用服务修改权限时的解决方案)
当你没有权限直接修改Volo.Abp.Identity.IdentityUser官方应用服务时,可以通过重写IdentityUser应用服务的方式,结合IDataFilter来实现软删除用户的恢复,具体步骤如下:
1. 创建自定义IdentityUser应用服务类
继承官方的IdentityUserAppService,注入IDataFilter和IIdentityUserRepository,添加恢复用户的方法:
using Volo.Abp.Data; using Volo.Abp.Identity; using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Entities; public class CustomIdentityUserAppService : IdentityUserAppService { private readonly IDataFilter _dataFilter; private readonly IIdentityUserRepository _userRepository; public CustomIdentityUserAppService( IIdentityUserRepository userRepository, IIdentityUserManager userManager, IDataFilter dataFilter) : base(userRepository, userManager) { _dataFilter = dataFilter; _userRepository = userRepository; } /// <summary> /// 恢复指定ID的软删除用户 /// </summary> /// <param name="userId">用户ID</param> public async Task RestoreUserAsync(Guid userId) { // 临时关闭软删除过滤,获取已删除的用户 using (_dataFilter.Disable<ISoftDelete>()) { var user = await _userRepository.GetAsync(userId); if (user == null) { throw new EntityNotFoundException(typeof(IdentityUser), userId); } // 重置软删除状态 user.IsDeleted = false; user.DeletionTime = null; await _userRepository.UpdateAsync(user); await CurrentUnitOfWork.SaveChangesAsync(); } } }
2. 替换官方服务为自定义服务
在你的模块类的ConfigureServices方法中,将官方的IIdentityUserAppService替换为自定义的实现:
using Volo.Abp.Modularity; using Volo.Abp.Identity; [DependsOn(typeof(AbpIdentityModule))] public class YourModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { // 替换官方IdentityUser应用服务 context.Services.Replace(ServiceDescriptor.Transient<IIdentityUserAppService, CustomIdentityUserAppService>()); } }
原理说明
- 通过重写官方应用服务,你可以在不修改源码的情况下扩展功能;
IDataFilter.Disable<ISoftDelete>()会临时关闭软删除数据过滤,让你能查询到已软删除的用户记录;- 修改用户的
IsDeleted为false并清空DeletionTime,再保存即可完成恢复。
内容的提问来源于stack exchange,提问作者Murat ATAK
相关产品推荐
相关产品推荐

