Browse Source

Merge pull request #5318 from abpframework/liangshiwei/organizataionUnits

Add unadded users/roles method to OrganizationUnitRepository
pull/5338/head
Galip Tolga Erdem 6 years ago
committed by GitHub
parent
commit
c28c276804
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 16
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IOrganizationUnitRepository.cs
  2. 10
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnit.cs
  3. 52
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreOrganizationUnitRepository.cs
  4. 37
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoOrganizationUnitRepository.cs
  5. 21
      modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/OrganizationUnitRepository_Tests.cs

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

@ -55,6 +55,14 @@ namespace Volo.Abp.Identity
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
); );
Task<List<IdentityRole>> GetUnaddedRolesAsync(
OrganizationUnit organizationUnit,
string filter = null,
string sorting = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetMembersAsync( Task<List<IdentityUser>> GetMembersAsync(
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
string sorting = null, string sorting = null,
@ -71,6 +79,14 @@ namespace Volo.Abp.Identity
CancellationToken cancellationToken = default CancellationToken cancellationToken = default
); );
Task<List<IdentityUser>> GetUnaddedUsersAsync(
OrganizationUnit organizationUnit,
string filter = null,
string sorting = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task RemoveAllRolesAsync( Task RemoveAllRolesAsync(
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default CancellationToken cancellationToken = default

10
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/OrganizationUnit.cs

@ -23,16 +23,16 @@ namespace Volo.Abp.Identity
/// <summary> /// <summary>
/// Hierarchical Code of this organization unit. /// Hierarchical Code of this organization unit.
/// Example: "00001.00042.00005". /// Example: "00001.00042.00005".
/// This is a unique code for a Tenant. /// This is a unique code for an OrganizationUnit.
/// It's changeable if OU hierarchy is changed. /// It's changeable if OU hierarchy is changed.
/// </summary> /// </summary>
public virtual string Code { get; internal set; } public virtual string Code { get; internal set; }
/// <summary> /// <summary>
/// Display name of this role. /// Display name of this OrganizationUnit.
/// </summary> /// </summary>
public virtual string DisplayName { get; set; } public virtual string DisplayName { get; set; }
/// <summary> /// <summary>
/// Roles of this OU. /// Roles of this OU.
/// </summary> /// </summary>
@ -77,7 +77,7 @@ namespace Volo.Abp.Identity
} }
/// <summary> /// <summary>
/// Appends a child code to a parent code. /// Appends a child code to a parent code.
/// Example: if parentCode = "00001", childCode = "00042" then returns "00001.00042". /// Example: if parentCode = "00001", childCode = "00042" then returns "00001.00042".
/// </summary> /// </summary>
/// <param name="parentCode">Parent code. Can be null or empty if parent is a root.</param> /// <param name="parentCode">Parent code. Can be null or empty if parent is a root.</param>

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

@ -12,7 +12,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
{ {
public class EfCoreOrganizationUnitRepository public class EfCoreOrganizationUnitRepository
: EfCoreRepository<IIdentityDbContext, OrganizationUnit, Guid>, : EfCoreRepository<IIdentityDbContext, OrganizationUnit, Guid>,
IOrganizationUnitRepository IOrganizationUnitRepository
{ {
public EfCoreOrganizationUnitRepository( public EfCoreOrganizationUnitRepository(
IDbContextProvider<IIdentityDbContext> dbContextProvider) IDbContextProvider<IIdentityDbContext> dbContextProvider)
@ -56,6 +56,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
.PageBy(skipCount, maxResultCount) .PageBy(skipCount, maxResultCount)
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public virtual async Task<List<OrganizationUnit>> GetListAsync( public virtual async Task<List<OrganizationUnit>> GetListAsync(
IEnumerable<Guid> ids, IEnumerable<Guid> ids,
bool includeDetails = false, bool includeDetails = false,
@ -111,6 +112,23 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
return await query.CountAsync(GetCancellationToken(cancellationToken)); return await query.CountAsync(GetCancellationToken(cancellationToken));
} }
public virtual async Task<List<IdentityRole>> GetUnaddedRolesAsync(
OrganizationUnit organizationUnit,
string filter = null,
string sorting = null,
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToList();
return await DbContext.Roles
.Where(r => !roleIds.Contains(r.Id))
.IncludeDetails(includeDetails)
.WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter))
.OrderBy(sorting ?? nameof(IdentityRole.Name))
.ToListAsync(cancellationToken);
}
public virtual async Task<List<IdentityUser>> GetMembersAsync( public virtual async Task<List<IdentityUser>> GetMembersAsync(
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
string sorting = null, string sorting = null,
@ -118,8 +136,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
int skipCount = 0, int skipCount = 0,
string filter = null, string filter = null,
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default CancellationToken cancellationToken = default)
)
{ {
var query = CreateGetMembersFilteredQuery(organizationUnit, filter); var query = CreateGetMembersFilteredQuery(organizationUnit, filter);
@ -138,6 +155,35 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
return await query.CountAsync(GetCancellationToken(cancellationToken)); return await query.CountAsync(GetCancellationToken(cancellationToken));
} }
public virtual async Task<List<IdentityUser>> GetUnaddedUsersAsync(
OrganizationUnit organizationUnit,
string filter = null,
string sorting = null,
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var userIdsInOrganizationUnit = DbContext.Set<IdentityUserOrganizationUnit>()
.Where(uou => uou.OrganizationUnitId == organizationUnit.Id)
.Select(uou => uou.UserId);
var query = DbContext.Users
.Where(u => !userIdsInOrganizationUnit.Contains(u.Id));
if (!filter.IsNullOrWhiteSpace())
{
query = query.Where(u =>
u.UserName.Contains(filter) ||
u.Email.Contains(filter) ||
(u.PhoneNumber != null && u.PhoneNumber.Contains(filter))
);
}
return await query
.IncludeDetails(includeDetails)
.OrderBy(sorting ?? nameof(IdentityUser.Name))
.ToListAsync(cancellationToken);
}
public override IQueryable<OrganizationUnit> WithDetails() public override IQueryable<OrganizationUnit> WithDetails()
{ {
return GetQueryable().IncludeDetails(); return GetQueryable().IncludeDetails();

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

@ -107,6 +107,22 @@ namespace Volo.Abp.Identity.MongoDB
.CountAsync(cancellationToken); .CountAsync(cancellationToken);
} }
public async Task<List<IdentityRole>> GetUnaddedRolesAsync(
OrganizationUnit organizationUnit,
string filter = null,
string sorting = null,
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
var roleIds = organizationUnit.Roles.Select(r => r.RoleId).ToArray();
return await DbContext.Roles.AsQueryable()
.Where(r => !roleIds.Contains(r.Id))
.WhereIf(!filter.IsNullOrWhiteSpace(), r => r.Name.Contains(filter))
.OrderBy(sorting ?? nameof(IdentityRole.Name))
.As<IMongoQueryable<IdentityRole>>()
.ToListAsync(cancellationToken);
}
public virtual async Task<List<IdentityUser>> GetMembersAsync( public virtual async Task<List<IdentityUser>> GetMembersAsync(
OrganizationUnit organizationUnit, OrganizationUnit organizationUnit,
string sorting = null, string sorting = null,
@ -135,6 +151,27 @@ namespace Volo.Abp.Identity.MongoDB
return await query.CountAsync(GetCancellationToken(cancellationToken)); return await query.CountAsync(GetCancellationToken(cancellationToken));
} }
public async Task<List<IdentityUser>> GetUnaddedUsersAsync(
OrganizationUnit organizationUnit,
string filter = null,
string sorting = null,
bool includeDetails = false,
CancellationToken cancellationToken = default)
{
return await 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))
)
.OrderBy(sorting ?? nameof(IdentityUser.UserName))
.As<IMongoQueryable<IdentityUser>>()
.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual Task RemoveAllRolesAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default) public virtual Task RemoveAllRolesAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default)
{ {
organizationUnit.Roles.Clear(); organizationUnit.Roles.Clear();

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

@ -284,5 +284,26 @@ namespace Volo.Abp.Identity
await uow.CompleteAsync(); await uow.CompleteAsync();
} }
} }
[Fact]
public async Task GetUnaddedUsersOfOrganizationUnitAsync()
{
var ou = await _organizationUnitRepository.GetAsync("OU111", true);
var unaddedUsers = await _organizationUnitRepository.GetUnaddedUsersAsync(ou);
unaddedUsers.ShouldNotContain(u => u.UserName == "john.nash");
unaddedUsers.ShouldContain(u => u.UserName == "administrator");
}
[Fact]
public async Task GetUnaddedRolesOfOrganizationUnitAsync()
{
var ou = await _organizationUnitRepository.GetAsync("OU111", true);
var unaddedRoles = await _organizationUnitRepository.GetUnaddedRolesAsync(ou);
unaddedRoles.ShouldNotContain(u => u.Name == "manager");
unaddedRoles.ShouldNotContain(u => u.Name == "moderator");
unaddedRoles.ShouldContain(u => u.Name.Contains("admin"));
}
} }
} }

Loading…
Cancel
Save