Browse Source

Merge pull request #18264 from abpframework/liangshiwei/identity-patch

Remove user-related data when deleting a user
pull/18325/head
maliming 3 years ago
committed by GitHub
parent
commit
98a29d033c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs
  2. 19
      modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityRoleRepository_Tests.cs

18
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserManager.cs

@ -25,6 +25,7 @@ public class IdentityUserManager : UserManager<IdentityUser>, IDomainService
protected IOrganizationUnitRepository OrganizationUnitRepository { get; }
protected ISettingProvider SettingProvider { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
protected IIdentityLinkUserRepository IdentityLinkUserRepository { get; }
protected override CancellationToken CancellationToken => CancellationTokenProvider.Token;
@ -42,7 +43,8 @@ public class IdentityUserManager : UserManager<IdentityUser>, IDomainService
ILogger<IdentityUserManager> logger,
ICancellationTokenProvider cancellationTokenProvider,
IOrganizationUnitRepository organizationUnitRepository,
ISettingProvider settingProvider)
ISettingProvider settingProvider,
IIdentityLinkUserRepository identityLinkUserRepository)
: base(
store,
optionsAccessor,
@ -58,6 +60,7 @@ public class IdentityUserManager : UserManager<IdentityUser>, IDomainService
SettingProvider = settingProvider;
RoleRepository = roleRepository;
UserRepository = userRepository;
IdentityLinkUserRepository = identityLinkUserRepository;
CancellationTokenProvider = cancellationTokenProvider;
}
@ -71,6 +74,19 @@ public class IdentityUserManager : UserManager<IdentityUser>, IDomainService
return await CreateAsync(user);
}
public async override Task<IdentityResult> DeleteAsync(IdentityUser user)
{
user.Claims.Clear();
user.Roles.Clear();
user.Tokens.Clear();
user.Logins.Clear();
user.OrganizationUnits.Clear();
await IdentityLinkUserRepository.DeleteAsync(new IdentityLinkUserInfo(user.Id, user.TenantId), CancellationToken);
await UpdateAsync(user);
return await base.DeleteAsync(user);
}
public virtual async Task<IdentityUser> GetByIdAsync(Guid id)
{

19
modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityRoleRepository_Tests.cs

@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Modularity;
using Volo.Abp.Uow;
using Xunit;
namespace Volo.Abp.Identity;
@ -13,11 +14,17 @@ public abstract class IdentityRoleRepository_Tests<TStartupModule> : AbpIdentity
{
protected IIdentityRoleRepository RoleRepository { get; }
protected ILookupNormalizer LookupNormalizer { get; }
protected IdentityUserManager UserManager { get; }
protected IdentityTestData TestData { get; }
protected IUnitOfWorkManager UnitOfWorkManager { get; }
protected IdentityRoleRepository_Tests()
{
RoleRepository = ServiceProvider.GetRequiredService<IIdentityRoleRepository>();
LookupNormalizer = ServiceProvider.GetRequiredService<ILookupNormalizer>();
UserManager = ServiceProvider.GetRequiredService<IdentityUserManager>();
TestData = ServiceProvider.GetRequiredService<IdentityTestData>();
UnitOfWorkManager = ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
}
[Fact]
@ -77,5 +84,17 @@ public abstract class IdentityRoleRepository_Tests<TStartupModule> : AbpIdentity
roles.ShouldContain(r => r.Role.Name == "moderator" && r.UserCount == 1);
roles.ShouldContain(r => r.Role.Name == "supporter" && r.UserCount == 2);
roles.ShouldContain(r => r.Role.Name == "manager" && r.UserCount == 1);
using (var uow = UnitOfWorkManager.Begin())
{
var userBob = await UserManager.FindByIdAsync(TestData.UserBobId.ToString());
await UserManager.DeleteAsync(userBob!);
await uow.CompleteAsync();
}
roles = await RoleRepository.GetListWithUserCountAsync();
roles.Count.ShouldBe(4);
roles.ShouldContain(r => r.Role.Name == "manager" && r.UserCount == 0);
}
}

Loading…
Cancel
Save