Browse Source

Fixed OrganizationUnit where user is not updated when roles are added/removed

pull/5243/head
Galip Tolga Erdem 6 years ago
parent
commit
55209702f1
  1. 8
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnitManager.cs
  2. 43
      modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs

8
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnitManager.cs

@ -54,8 +54,8 @@ namespace Volo.Abp.Identity
return OrganizationUnit.CalculateNextCode(lastChild.Code); return OrganizationUnit.CalculateNextCode(lastChild.Code);
} }
var parentCode = parentId != null var parentCode = parentId != null
? await GetCodeOrDefaultAsync(parentId.Value) ? await GetCodeOrDefaultAsync(parentId.Value)
: null; : null;
return OrganizationUnit.AppendCode( return OrganizationUnit.AppendCode(
@ -174,7 +174,7 @@ namespace Volo.Abp.Identity
return Task.FromResult(0); return Task.FromResult(0);
} }
ou.AddRole(role.Id); ou.AddRole(role.Id);
return Task.FromResult(0); return OrganizationUnitRepository.UpdateAsync(ou);
} }
public virtual async Task RemoveRoleFromOrganizationUnitAsync(Guid roleId, Guid ouId) public virtual async Task RemoveRoleFromOrganizationUnitAsync(Guid roleId, Guid ouId)
@ -188,7 +188,7 @@ namespace Volo.Abp.Identity
public virtual Task RemoveRoleFromOrganizationUnitAsync(IdentityRole role, OrganizationUnit organizationUnit) public virtual Task RemoveRoleFromOrganizationUnitAsync(IdentityRole role, OrganizationUnit organizationUnit)
{ {
organizationUnit.RemoveRole(role.Id); organizationUnit.RemoveRole(role.Id);
return Task.FromResult(0); return OrganizationUnitRepository.UpdateAsync(organizationUnit);
} }
} }
} }

43
modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs

@ -16,6 +16,7 @@ namespace Volo.Abp.Identity
where TStartupModule : IAbpModule where TStartupModule : IAbpModule
{ {
private readonly IOrganizationUnitRepository _organizationUnitRepository; private readonly IOrganizationUnitRepository _organizationUnitRepository;
private readonly IIdentityRoleRepository _identityRoleRepository;
private readonly ILookupNormalizer _lookupNormalizer; private readonly ILookupNormalizer _lookupNormalizer;
private readonly IdentityTestData _testData; private readonly IdentityTestData _testData;
private readonly IGuidGenerator _guidGenerator; private readonly IGuidGenerator _guidGenerator;
@ -27,6 +28,7 @@ namespace Volo.Abp.Identity
public OrganizationUnitRepository_Tests() public OrganizationUnitRepository_Tests()
{ {
_organizationUnitRepository = ServiceProvider.GetRequiredService<IOrganizationUnitRepository>(); _organizationUnitRepository = ServiceProvider.GetRequiredService<IOrganizationUnitRepository>();
_identityRoleRepository = ServiceProvider.GetRequiredService<IIdentityRoleRepository>();
_lookupNormalizer = ServiceProvider.GetRequiredService<ILookupNormalizer>(); _lookupNormalizer = ServiceProvider.GetRequiredService<ILookupNormalizer>();
_testData = GetRequiredService<IdentityTestData>(); _testData = GetRequiredService<IdentityTestData>();
_guidGenerator = GetRequiredService<IGuidGenerator>(); _guidGenerator = GetRequiredService<IGuidGenerator>();
@ -80,6 +82,45 @@ namespace Volo.Abp.Identity
_lookupNormalizer.NormalizeName("david")); _lookupNormalizer.NormalizeName("david"));
updatedUser.OrganizationUnits.Count.ShouldBe(2); updatedUser.OrganizationUnits.Count.ShouldBe(2);
} }
[Fact]
public async Task AddRoleToOrganizationUnit()
{
using (var uow = _unitOfWorkManager.Begin())
{
var ou111 = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU111"));
ou111.Roles.Count.ShouldBe(2);
var roleSupporter = await _identityRoleRepository.FindByNormalizedNameAsync(
_lookupNormalizer.NormalizeName("supporter"));
await _organizationUnitManager.AddRoleToOrganizationUnitAsync(roleSupporter.Id, ou111.Id);
await uow.CompleteAsync();
}
var ou111Updated = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU111"));
ou111Updated.Roles.Count.ShouldBeGreaterThan(2);
}
[Fact]
public async Task RemoveRoleFromOrganizationUnit()
{
using (var uow = _unitOfWorkManager.Begin())
{
var ou111 = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU111"));
ou111.Roles.ShouldContain(q => q.RoleId == _testData.RoleModeratorId);
await _organizationUnitManager.RemoveRoleFromOrganizationUnitAsync(_testData.RoleModeratorId, ou111.Id);
await uow.CompleteAsync();
}
var ou111Updated = await _organizationUnitRepository.GetAsync(
_lookupNormalizer.NormalizeName("OU111"));
ou111Updated.Roles.ShouldNotContain(q => q.RoleId == _testData.RoleModeratorId);
}
[Fact] [Fact]
public async Task RemoveOrganizationUnitFromUser() public async Task RemoveOrganizationUnitFromUser()
{ {
@ -91,7 +132,7 @@ namespace Volo.Abp.Identity
_lookupNormalizer.NormalizeName("david")); _lookupNormalizer.NormalizeName("david"));
user.OrganizationUnits.Count.ShouldBe(1); user.OrganizationUnits.Count.ShouldBe(1);
user.OrganizationUnits.ShouldContain(q=>q.OrganizationUnitId == ou112.Id); user.OrganizationUnits.ShouldContain(q => q.OrganizationUnitId == ou112.Id);
await _identityUserManager.RemoveFromOrganizationUnitAsync(user.Id, ou112.Id); await _identityUserManager.RemoveFromOrganizationUnitAsync(user.Id, ou112.Id);
await uow.CompleteAsync(); await uow.CompleteAsync();

Loading…
Cancel
Save