Commit 62766cf0 authored by Marko Matic's avatar Marko Matic
Browse files

find users by claim

parent 80d587f9
......@@ -236,5 +236,21 @@ namespace Skoruba.IdentityServer4.Admin.Api.Controllers
return Ok(roleClaimsApiDto);
}
}
[HttpGet("ClaimType/{claimType}/ClaimValue/{claimValue}")]
public async Task<ActionResult<RoleClaimsApiDto<TRoleDtoKey>>> GetClaimUsers(string claimType, string claimValue, int page = 1, int pageSize = 10)
{
var usersDto = await _identityService.GetClaimUsersAsync(claimType, claimValue, page, pageSize);
return Ok(usersDto);
}
[HttpGet("ClaimType/{claimType}")]
public async Task<ActionResult<RoleClaimsApiDto<TRoleDtoKey>>> GetClaimUsers(string claimType, int page = 1, int pageSize = 10)
{
var usersDto = await _identityService.GetClaimUsersAsync(claimType, null, page, pageSize);
return Ok(usersDto);
}
}
}
\ No newline at end of file
using Skoruba.AuditLogging.Events;
using Skoruba.IdentityServer4.Admin.BusinessLogic.Identity.Dtos.Identity;
namespace Skoruba.IdentityServer4.Admin.BusinessLogic.Identity.Events.Identity
{
public class ClaimUsersRequestedEvent<TUsersDto> : AuditEvent
{
public TUsersDto Users { get; set; }
public ClaimUsersRequestedEvent(TUsersDto users)
{
Users = users;
}
}
}
\ No newline at end of file
......@@ -98,8 +98,17 @@ namespace Skoruba.IdentityServer4.Admin.BusinessLogic.Identity.Services
await AuditEventLogger.LogEventAsync(new RoleUsersRequestedEvent<TUsersDto>(usersDto));
return usersDto;
}
}
public virtual async Task<TUsersDto> GetClaimUsersAsync(string claimType, string claimValue, int page = 1, int pageSize = 10)
{
var pagedList = await IdentityRepository.GetClaimUsersAsync(claimType, claimValue, page, pageSize);
var usersDto = Mapper.Map<TUsersDto>(pagedList);
await AuditEventLogger.LogEventAsync(new ClaimUsersRequestedEvent<TUsersDto>(usersDto));
return usersDto;
}
public virtual async Task<TRolesDto> GetRolesAsync(string search, int page = 1, int pageSize = 10)
{
PagedList<TRole> pagedList = await IdentityRepository.GetRolesAsync(search, page, pageSize);
......
......@@ -34,7 +34,9 @@ namespace Skoruba.IdentityServer4.Admin.BusinessLogic.Identity.Services.Interfac
Task<bool> ExistsRoleAsync(string roleId);
Task<TUsersDto> GetUsersAsync(string search, int page = 1, int pageSize = 10);
Task<TUsersDto> GetRoleUsersAsync(string roleId, string search, int page = 1, int pageSize = 10);
Task<TUsersDto> GetRoleUsersAsync(string roleId, string search, int page = 1, int pageSize = 10);
Task<TUsersDto> GetClaimUsersAsync(string claimType, string claimValue, int page = 1, int pageSize = 10);
Task<TRolesDto> GetRolesAsync(string search, int page = 1, int pageSize = 10);
Task<(IdentityResult identityResult, TKey roleId)> CreateRoleAsync(TRoleDto role);
......
......@@ -111,6 +111,25 @@ namespace Skoruba.IdentityServer4.Admin.EntityFramework.Identity.Repositories
pagedList.TotalCount = await users.CountAsync();
pagedList.PageSize = pageSize;
return pagedList;
}
public virtual async Task<PagedList<TUser>> GetClaimUsersAsync(string claimType, string claimValue, int page = 1, int pageSize = 10)
{
var pagedList = new PagedList<TUser>();
var users = DbContext.Set<TUser>()
.Join(DbContext.Set<TUserClaim>(), u => u.Id, uc => uc.UserId, (u, uc) => new { u, uc })
.Where(t => t.uc.ClaimType.Equals(claimType))
.WhereIf(!string.IsNullOrEmpty(claimValue), t => t.uc.ClaimValue.Equals(claimValue))
.Select(t => t.u).Distinct();
var pagedUsers = await users.PageBy(x => x.Id, page, pageSize)
.ToListAsync();
pagedList.Data.AddRange(pagedUsers);
pagedList.TotalCount = await users.CountAsync();
pagedList.PageSize = pageSize;
return pagedList;
}
......
......@@ -22,7 +22,9 @@ namespace Skoruba.IdentityServer4.Admin.EntityFramework.Identity.Repositories.In
Task<PagedList<TUser>> GetUsersAsync(string search, int page = 1, int pageSize = 10);
Task<PagedList<TUser>> GetRoleUsersAsync(string roleId, string search, int page = 1, int pageSize = 10);
Task<PagedList<TUser>> GetRoleUsersAsync(string roleId, string search, int page = 1, int pageSize = 10);
Task<PagedList<TUser>> GetClaimUsersAsync(string claimType, string claimValue, int page = 1, int pageSize = 10);
Task<PagedList<TRole>> GetRolesAsync(string search, int page = 1, int pageSize = 10);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment