Browse Source

Merge pull request #4304 from abpframework/liangshiwei/module-identity-patch-1

Update OrganizationUnitRepository
pull/4321/head
Galip Tolga Erdem 6 years ago
committed by GitHub
parent
commit
9ef95ac555
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IOrganizationUnitRepository.cs
  2. 41
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs
  3. 32
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs
  4. 13
      modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs

1
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IOrganizationUnitRepository.cs

@ -67,6 +67,7 @@ namespace Volo.Abp.Identity
Task<int> GetMembersCountAsync( Task<int> GetMembersCountAsync(
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
); );

41
modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs

@ -121,33 +121,19 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
) )
{ {
var query = from userOu in DbContext.Set<IdentityUserOrganizationUnit>() var query = CreateGetMembersFilteredQuery(organizationUnit, filter);
join user in DbContext.Users.IncludeDetails(includeDetails) on userOu.UserId equals user.Id
where userOu.OrganizationUnitId == organizationUnit.Id
select user;
if (!filter.IsNullOrWhiteSpace()) return await query.IncludeDetails(includeDetails).OrderBy(sorting ?? nameof(IdentityUser.UserName))
{
query = query.Where(u =>
u.UserName.Contains(filter) ||
u.Email.Contains(filter) ||
(u.PhoneNumber != null && u.PhoneNumber.Contains(filter))
);
}
return await query.OrderBy(sorting ?? nameof(IdentityUser.UserName))
.PageBy(skipCount, maxResultCount) .PageBy(skipCount, maxResultCount)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public virtual async Task<int> GetMembersCountAsync( public virtual async Task<int> GetMembersCountAsync(
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = from userOu in DbContext.Set<IdentityUserOrganizationUnit>() var query = CreateGetMembersFilteredQuery(organizationUnit, filter);
join user in DbContext.Users on userOu.UserId equals user.Id
where userOu.OrganizationUnitId == organizationUnit.Id
select user;
return await query.CountAsync(GetCancellationToken(cancellationToken)); return await query.CountAsync(GetCancellationToken(cancellationToken));
} }
@ -175,5 +161,24 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
DbContext.Set<IdentityUserOrganizationUnit>().RemoveRange(ouMembersQuery); DbContext.Set<IdentityUserOrganizationUnit>().RemoveRange(ouMembersQuery);
} }
protected virtual IQueryable<IdentityUser> CreateGetMembersFilteredQuery(OrganizationUnit organizationUnit, string filter = null)
{
var query = from userOu in DbContext.Set<IdentityUserOrganizationUnit>()
join user in DbContext.Users on userOu.UserId equals user.Id
where userOu.OrganizationUnitId == organizationUnit.Id
select user;
if (!filter.IsNullOrWhiteSpace())
{
query = query.Where(u =>
u.UserName.Contains(filter) ||
u.Email.Contains(filter) ||
(u.PhoneNumber != null && u.PhoneNumber.Contains(filter))
);
}
return query;
}
} }
} }

32
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs

@ -116,14 +116,9 @@ namespace Volo.Abp.Identity.MongoDB
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbContext.Users.AsQueryable() var query = CreateGetMembersFilteredQuery(organizationUnit, filter);
.Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id))
.WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>( return await query
!filter.IsNullOrWhiteSpace(),
u =>
u.UserName.Contains(filter) ||
u.Email.Contains(filter)
)
.OrderBy(sorting ?? nameof(IdentityUser.UserName)) .OrderBy(sorting ?? nameof(IdentityUser.UserName))
.As<IMongoQueryable<IdentityUser>>() .As<IMongoQueryable<IdentityUser>>()
.PageBy<IdentityUser, IMongoQueryable<IdentityUser>>(skipCount, maxResultCount) .PageBy<IdentityUser, IMongoQueryable<IdentityUser>>(skipCount, maxResultCount)
@ -132,12 +127,12 @@ namespace Volo.Abp.Identity.MongoDB
public virtual async Task<int> GetMembersCountAsync( public virtual async Task<int> GetMembersCountAsync(
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbContext.Users.AsQueryable() var query = CreateGetMembersFilteredQuery(organizationUnit, filter);
.Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id))
.As<IMongoQueryable<IdentityUser>>() return await query.CountAsync(GetCancellationToken(cancellationToken));
.CountAsync(GetCancellationToken(cancellationToken));
} }
public virtual Task RemoveAllRolesAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) public virtual Task RemoveAllRolesAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default)
@ -159,5 +154,18 @@ namespace Volo.Abp.Identity.MongoDB
DbContext.Users.ReplaceOne(u => u.Id == user.Id, user); DbContext.Users.ReplaceOne(u => u.Id == user.Id, user);
} }
} }
protected virtual IMongoQueryable<IdentityUser> CreateGetMembersFilteredQuery(OrganizationUnit organizationUnit, string filter = null)
{
return DbContext.Users.AsQueryable()
.Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id))
.WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>(
!filter.IsNullOrWhiteSpace(),
u =>
u.UserName.Contains(filter) ||
u.Email.Contains(filter) ||
(u.PhoneNumber != null && u.PhoneNumber.Contains(filter))
);
}
} }
} }

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

@ -143,6 +143,19 @@ namespace Volo.Abp.Identity
usersCount.ShouldBeGreaterThan(1); usersCount.ShouldBeGreaterThan(1);
} }
[Fact]
public async Task GetMembersCountOfOrganizationUnitWithParamsAsync()
{
OrganizationUnit ou = await _organizationUnitRepository.GetAsync("OU111", true);
var usersCount = await _organizationUnitRepository.GetMembersCountAsync(ou,"n");
usersCount.ShouldBeGreaterThan(1);
usersCount.ShouldBeLessThanOrEqualTo(5);
usersCount = await _organizationUnitRepository.GetMembersCountAsync(ou,"undefined-username");
usersCount.ShouldBe(0);
}
[Fact] [Fact]
public async Task GetRolesCountOfOrganizationUnit() public async Task GetRolesCountOfOrganizationUnit()
{ {

Loading…
Cancel
Save