Merge pull request #18148 from abpframework/GetRolesAsync

Add  `GetRolesAsync` by `organizationUnitIds` method to `IOrganizationUnitRepository`.
pull/18151/head
ahmetfarukulu 2 years ago committed by GitHub
commit 5a9e0a7ca1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -50,6 +50,15 @@ public interface IOrganizationUnitRepository : IBasicRepository<OrganizationUnit
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetRolesAsync(
Guid[] organizationUnitIds,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetRolesCountAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default

@ -105,6 +105,28 @@ public class EfCoreOrganizationUnitRepository
return await query.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<IdentityRole>> GetRolesAsync(
Guid[] organizationUnitIds,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var dbContext = await GetDbContextAsync();
var query = from organizationRole in dbContext.Set<OrganizationUnitRole>()
join role in dbContext.Roles.IncludeDetails(includeDetails) on organizationRole.RoleId equals role.Id
where organizationUnitIds.Contains(organizationRole.OrganizationUnitId)
select role;
query = query
.OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityRole.Name) : sorting)
.PageBy(skipCount, maxResultCount);
return await query.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<int> GetRolesCountAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default)

@ -98,6 +98,28 @@ public class MongoOrganizationUnitRepository
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<IdentityRole>> GetRolesAsync(
Guid[] organizationUnitIds,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var organizationUnits = await (await GetMongoQueryableAsync(cancellationToken))
.Where(ou => organizationUnitIds.Contains(ou.Id))
.ToListAsync(GetCancellationToken(cancellationToken));
var roleIds = organizationUnits.SelectMany(ou => ou.Roles.Select(r => r.RoleId)).ToArray();
return await (await GetMongoQueryableAsync<IdentityRole>(cancellationToken))
.Where(r => roleIds.Contains(r.Id))
.OrderBy(sorting.IsNullOrEmpty() ? nameof(IdentityRole.Name) : sorting)
.As<IMongoQueryable<IdentityRole>>()
.PageBy<IdentityRole, IMongoQueryable<IdentityRole>>(skipCount, maxResultCount)
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<int> GetRolesCountAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default)

@ -185,6 +185,11 @@ public abstract class OrganizationUnitRepository_Tests<TStartupModule> : AbpIden
maxResultCount: 1, includeDetails: true);
ou111Roles.Count.ShouldBe(1);
ou111Roles.ShouldContain(n => n.Name == "moderator");
ou111Roles = await _organizationUnitRepository.GetRolesAsync(new []{ ou.Id }, sorting: "name desc",
maxResultCount: 1, includeDetails: true);
ou111Roles.Count.ShouldBe(1);
ou111Roles.ShouldContain(n => n.Name == "moderator");
}
[Fact]

Loading…
Cancel
Save