mirror of https://github.com/abpframework/abp.git
committed by
GitHub
13 changed files with 154 additions and 5 deletions
@ -0,0 +1,8 @@ |
|||||
|
namespace Volo.Abp.Identity |
||||
|
{ |
||||
|
public class IdentityRoleNameChangedEvent |
||||
|
{ |
||||
|
public IdentityRole IdentityRole { get; set; } |
||||
|
public string OldName { get; set; } |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Domain.Entities.Events; |
||||
|
using Volo.Abp.EventBus; |
||||
|
using Volo.Abp.Identity; |
||||
|
|
||||
|
namespace Volo.Abp.PermissionManagement.Identity |
||||
|
{ |
||||
|
public class RoleUpdateEventHandler : |
||||
|
ILocalEventHandler<IdentityRoleNameChangedEvent>, |
||||
|
ITransientDependency |
||||
|
{ |
||||
|
protected IIdentityRoleRepository RoleRepository { get; } |
||||
|
protected IPermissionManager PermissionManager { get; } |
||||
|
protected IPermissionGrantRepository PermissionGrantRepository { get; } |
||||
|
|
||||
|
public RoleUpdateEventHandler( |
||||
|
IIdentityRoleRepository roleRepository, |
||||
|
IPermissionManager permissionManager, |
||||
|
IPermissionGrantRepository permissionGrantRepository) |
||||
|
{ |
||||
|
RoleRepository = roleRepository; |
||||
|
PermissionManager = permissionManager; |
||||
|
PermissionGrantRepository = permissionGrantRepository; |
||||
|
} |
||||
|
|
||||
|
public async Task HandleEventAsync(IdentityRoleNameChangedEvent eventData) |
||||
|
{ |
||||
|
var role = await RoleRepository.FindAsync(eventData.IdentityRole.Id, false).ConfigureAwait(false); |
||||
|
if (role == null) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync(RolePermissionValueProvider.ProviderName, eventData.OldName).ConfigureAwait(false); |
||||
|
foreach (var permissionGrant in permissionGrantsInRole) |
||||
|
{ |
||||
|
await PermissionManager.UpdateProviderKeyAsync(permissionGrant, eventData.IdentityRole.Name).ConfigureAwait(false); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,58 @@ |
|||||
|
using Microsoft.AspNetCore.Identity; |
||||
|
using Shouldly; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.EventBus.Distributed; |
||||
|
using Volo.Abp.Guids; |
||||
|
using Volo.Abp.PermissionManagement; |
||||
|
using Volo.Abp.Uow; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Volo.Abp.Identity |
||||
|
{ |
||||
|
public class RoleChangingEvents_Test : AbpIdentityDomainTestBase |
||||
|
{ |
||||
|
protected readonly IIdentityRoleRepository RoleRepository; |
||||
|
protected readonly IPermissionGrantRepository PermissionGrantRepository; |
||||
|
protected readonly IdentityRoleManager RoleManager; |
||||
|
protected readonly ILookupNormalizer LookupNormalizer; |
||||
|
protected readonly IGuidGenerator GuidGenerator; |
||||
|
protected readonly IUnitOfWorkManager UowManager; |
||||
|
|
||||
|
public RoleChangingEvents_Test() |
||||
|
{ |
||||
|
RoleRepository = GetRequiredService<IIdentityRoleRepository>(); ; |
||||
|
PermissionGrantRepository = GetRequiredService<IPermissionGrantRepository>(); ; |
||||
|
RoleManager = GetRequiredService<IdentityRoleManager>(); ; |
||||
|
LookupNormalizer = GetRequiredService<ILookupNormalizer>(); ; |
||||
|
GuidGenerator = GetRequiredService<IGuidGenerator>(); |
||||
|
UowManager = GetRequiredService<IUnitOfWorkManager>(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Role_Update_Event_Test() |
||||
|
{ |
||||
|
var role = await RoleRepository |
||||
|
.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName("moderator")) |
||||
|
.ConfigureAwait(false); |
||||
|
|
||||
|
var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name).ConfigureAwait(false); |
||||
|
permissionGrantsInRole.ShouldNotBeNull(); |
||||
|
permissionGrantsInRole.Count.ShouldBeGreaterThan(0); |
||||
|
var count = permissionGrantsInRole.Count; |
||||
|
|
||||
|
using (var uow = UowManager.Begin()) |
||||
|
{ |
||||
|
var identityResult = await RoleManager.SetRoleNameAsync(role, "TestModerator").ConfigureAwait(false); |
||||
|
identityResult.Succeeded.ShouldBeTrue(); |
||||
|
var xx = await RoleRepository.UpdateAsync(role).ConfigureAwait(false); |
||||
|
await uow.CompleteAsync().ConfigureAwait(false); |
||||
|
} |
||||
|
|
||||
|
role = await RoleRepository.GetAsync(role.Id).ConfigureAwait(false); |
||||
|
role.Name.ShouldBe("TestModerator"); |
||||
|
|
||||
|
permissionGrantsInRole = await PermissionGrantRepository.GetListAsync("R", role.Name).ConfigureAwait(false); |
||||
|
permissionGrantsInRole.Count.ShouldBe(count); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue