diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs index a68552d653..a184226117 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs @@ -9,6 +9,8 @@ namespace Volo.Abp.Identity { Task> GetRolesAsync(Guid id); + Task> GetAssignableRolesAsync(); + Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input); Task FindByUsernameAsync(string username); diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index 166d71fa5e..74b210066f 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -12,13 +12,16 @@ namespace Volo.Abp.Identity { protected IdentityUserManager UserManager { get; } protected IIdentityUserRepository UserRepository { get; } + public IIdentityRoleRepository RoleRepository { get; } public IdentityUserAppService( IdentityUserManager userManager, - IIdentityUserRepository userRepository) + IIdentityUserRepository userRepository, + IIdentityRoleRepository roleRepository) { UserManager = userManager; UserRepository = userRepository; + RoleRepository = roleRepository; } //TODO: [Authorize(IdentityPermissions.Users.Default)] should go the IdentityUserAppService class. @@ -54,6 +57,14 @@ namespace Volo.Abp.Identity ); } + [Authorize(IdentityPermissions.Users.Default)] + public virtual async Task> GetAssignableRolesAsync() + { + var list = await RoleRepository.GetListAsync(); + return new ListResultDto( + ObjectMapper.Map, List>(list)); + } + [Authorize(IdentityPermissions.Users.Create)] public virtual async Task CreateAsync(IdentityUserCreateDto input) { @@ -92,7 +103,7 @@ namespace Volo.Abp.Identity (await UserManager.RemovePasswordAsync(user)).CheckErrors(); (await UserManager.AddPasswordAsync(user, input.Password)).CheckErrors(); } - + await CurrentUnitOfWork.SaveChangesAsync(); return ObjectMapper.Map(user); diff --git a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs index b9b02a7150..1281135526 100644 --- a/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs +++ b/modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserController.cs @@ -59,6 +59,13 @@ namespace Volo.Abp.Identity return UserAppService.GetRolesAsync(id); } + [HttpGet] + [Route("assignable-roles")] + public Task> GetAssignableRolesAsync() + { + return UserAppService.GetAssignableRolesAsync(); + } + [HttpPut] [Route("{id}/roles")] public virtual Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input) diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs index 9622d87de2..e7a1f4a26d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs @@ -17,19 +17,17 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users public AssignedRoleViewModel[] Roles { get; set; } protected IIdentityUserAppService IdentityUserAppService { get; } - protected IIdentityRoleAppService IdentityRoleAppService { get; } - public CreateModalModel(IIdentityUserAppService identityUserAppService, IIdentityRoleAppService identityRoleAppService) + public CreateModalModel(IIdentityUserAppService identityUserAppService) { IdentityUserAppService = identityUserAppService; - IdentityRoleAppService = identityRoleAppService; } public virtual async Task OnGetAsync() { UserInfo = new UserInfoViewModel(); - var roleDtoList = (await IdentityRoleAppService.GetAllListAsync()).Items; + var roleDtoList = (await IdentityUserAppService.GetAssignableRolesAsync()).Items; Roles = ObjectMapper.Map, AssignedRoleViewModel[]>(roleDtoList); diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs index 7ffb58ccab..f14ec21fe6 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs @@ -19,19 +19,17 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users public AssignedRoleViewModel[] Roles { get; set; } protected IIdentityUserAppService IdentityUserAppService { get; } - protected IIdentityRoleAppService IdentityRoleAppService { get; } - public EditModalModel(IIdentityUserAppService identityUserAppService, IIdentityRoleAppService identityRoleAppService) + public EditModalModel(IIdentityUserAppService identityUserAppService) { IdentityUserAppService = identityUserAppService; - IdentityRoleAppService = identityRoleAppService; } public virtual async Task OnGetAsync(Guid id) { UserInfo = ObjectMapper.Map(await IdentityUserAppService.GetAsync(id)); - Roles = ObjectMapper.Map, AssignedRoleViewModel[]>((await IdentityRoleAppService.GetAllListAsync()).Items); + Roles = ObjectMapper.Map, AssignedRoleViewModel[]>((await IdentityUserAppService.GetAssignableRolesAsync()).Items); var userRoleNames = (await IdentityUserAppService.GetRolesAsync(UserInfo.Id)).Items.Select(r => r.Name).ToList(); foreach (var role in Roles) @@ -101,4 +99,4 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users public bool IsAssigned { get; set; } } } -} \ No newline at end of file +}