|
|
|
@ -24,7 +24,7 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
bool includeDetails = true, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
return await GetMongoQueryable() |
|
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.OrderBy(x => x.Id) |
|
|
|
.FirstOrDefaultAsync( |
|
|
|
u => u.NormalizedUserName == normalizedUserName, |
|
|
|
@ -40,14 +40,17 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
var organizationUnitIds = user.OrganizationUnits |
|
|
|
.Select(r => r.OrganizationUnitId) |
|
|
|
.ToArray(); |
|
|
|
var organizationUnits = DbContext.OrganizationUnits |
|
|
|
|
|
|
|
var dbContext = await GetDbContextAsync(cancellationToken); |
|
|
|
|
|
|
|
var organizationUnits = dbContext.OrganizationUnits |
|
|
|
.AsQueryable() |
|
|
|
.Where(ou => organizationUnitIds.Contains(ou.Id)) |
|
|
|
.ToArray(); |
|
|
|
var orgUnitRoleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToArray(); |
|
|
|
var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); |
|
|
|
var allRoleIds = orgUnitRoleIds.Union(roleIds); |
|
|
|
return await DbContext.Roles.AsQueryable().Where(r => allRoleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(GetCancellationToken(cancellationToken)); |
|
|
|
return await dbContext.Roles.AsQueryable().Where(r => allRoleIds.Contains(r.Id)).Select(r => r.Name).ToListAsync(GetCancellationToken(cancellationToken)); |
|
|
|
} |
|
|
|
|
|
|
|
public async Task<List<string>> GetRoleNamesInOrganizationUnitAsync( |
|
|
|
@ -60,14 +63,16 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
.Select(r => r.OrganizationUnitId) |
|
|
|
.ToArray(); |
|
|
|
|
|
|
|
var organizationUnits = DbContext.OrganizationUnits |
|
|
|
var dbContext = await GetDbContextAsync(cancellationToken); |
|
|
|
|
|
|
|
var organizationUnits = dbContext.OrganizationUnits |
|
|
|
.AsQueryable() |
|
|
|
.Where(ou => organizationUnitIds.Contains(ou.Id)) |
|
|
|
.ToArray(); |
|
|
|
|
|
|
|
var roleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToArray(); |
|
|
|
|
|
|
|
return await DbContext.Roles //TODO: Such usage suppress filters!
|
|
|
|
return await dbContext.Roles //TODO: Such usage suppress filters!
|
|
|
|
.AsQueryable() |
|
|
|
.Where(r => roleIds.Contains(r.Id)) |
|
|
|
.Select(r => r.Name) |
|
|
|
@ -80,7 +85,7 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
bool includeDetails = true, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
return await GetMongoQueryable() |
|
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.Where(u => u.Logins.Any(login => login.LoginProvider == loginProvider && login.ProviderKey == providerKey)) |
|
|
|
.OrderBy(x => x.Id) |
|
|
|
.FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); |
|
|
|
@ -91,7 +96,7 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
bool includeDetails = true, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
return await GetMongoQueryable() |
|
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.OrderBy(x => x.Id).FirstOrDefaultAsync(u => u.NormalizedEmail == normalizedEmail, GetCancellationToken(cancellationToken)); |
|
|
|
} |
|
|
|
|
|
|
|
@ -100,7 +105,7 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
bool includeDetails = false, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
return await GetMongoQueryable() |
|
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.Where(u => u.Claims.Any(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value)) |
|
|
|
.ToListAsync(GetCancellationToken(cancellationToken)); |
|
|
|
} |
|
|
|
@ -110,19 +115,21 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
bool includeDetails = false, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
var role = await DbContext.Roles.AsQueryable() |
|
|
|
cancellationToken = GetCancellationToken(cancellationToken); |
|
|
|
|
|
|
|
var role = await (await GetDbContextAsync(cancellationToken)).Roles.AsQueryable() //TODO: Such usages breaks data filters
|
|
|
|
.Where(x => x.NormalizedName == normalizedRoleName) |
|
|
|
.OrderBy(x => x.Id) |
|
|
|
.FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); |
|
|
|
.FirstOrDefaultAsync(cancellationToken); |
|
|
|
|
|
|
|
if (role == null) |
|
|
|
{ |
|
|
|
return new List<IdentityUser>(); |
|
|
|
} |
|
|
|
|
|
|
|
return await GetMongoQueryable() |
|
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.Where(u => u.Roles.Any(r => r.RoleId == role.Id)) |
|
|
|
.ToListAsync(GetCancellationToken(cancellationToken)); |
|
|
|
.ToListAsync(cancellationToken); |
|
|
|
} |
|
|
|
|
|
|
|
public virtual async Task<List<IdentityUser>> GetListAsync( |
|
|
|
@ -133,7 +140,7 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
bool includeDetails = false, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
return await GetMongoQueryable() |
|
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>( |
|
|
|
!filter.IsNullOrWhiteSpace(), |
|
|
|
u => |
|
|
|
@ -158,14 +165,17 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
var organizationUnitIds = user.OrganizationUnits |
|
|
|
.Select(r => r.OrganizationUnitId) |
|
|
|
.ToArray(); |
|
|
|
var organizationUnits = DbContext.OrganizationUnits |
|
|
|
|
|
|
|
var dbContext = await GetDbContextAsync(cancellationToken); |
|
|
|
|
|
|
|
var organizationUnits = dbContext.OrganizationUnits |
|
|
|
.AsQueryable() |
|
|
|
.Where(ou => organizationUnitIds.Contains(ou.Id)) |
|
|
|
.ToArray(); |
|
|
|
var orgUnitRoleIds = organizationUnits.SelectMany(x => x.Roles.Select(r => r.RoleId)).ToArray(); |
|
|
|
var roleIds = user.Roles.Select(r => r.RoleId).ToArray(); |
|
|
|
var allRoleIds = orgUnitRoleIds.Union(roleIds); |
|
|
|
return await DbContext.Roles.AsQueryable().Where(r => allRoleIds.Contains(r.Id)).ToListAsync(GetCancellationToken(cancellationToken)); |
|
|
|
return await dbContext.Roles.AsQueryable().Where(r => allRoleIds.Contains(r.Id)).ToListAsync(GetCancellationToken(cancellationToken)); |
|
|
|
} |
|
|
|
|
|
|
|
public async Task<List<OrganizationUnit>> GetOrganizationUnitsAsync( |
|
|
|
@ -175,17 +185,19 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
{ |
|
|
|
var user = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)); |
|
|
|
var organizationUnitIds = user.OrganizationUnits.Select(r => r.OrganizationUnitId); |
|
|
|
return await DbContext.OrganizationUnits.AsQueryable() |
|
|
|
|
|
|
|
var dbContext = await GetDbContextAsync(cancellationToken); |
|
|
|
|
|
|
|
return await dbContext.OrganizationUnits.AsQueryable() |
|
|
|
.Where(ou => organizationUnitIds.Contains(ou.Id)) |
|
|
|
.ToListAsync(GetCancellationToken(cancellationToken)) |
|
|
|
; |
|
|
|
.ToListAsync(GetCancellationToken(cancellationToken)); |
|
|
|
} |
|
|
|
|
|
|
|
public virtual async Task<long> GetCountAsync( |
|
|
|
string filter = null, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
return await GetMongoQueryable() |
|
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.WhereIf<IdentityUser, IMongoQueryable<IdentityUser>>( |
|
|
|
!filter.IsNullOrWhiteSpace(), |
|
|
|
u => |
|
|
|
@ -202,7 +214,7 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
Guid organizationUnitId, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
var result = await GetMongoQueryable() |
|
|
|
var result = await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnitId)) |
|
|
|
.ToListAsync(GetCancellationToken(cancellationToken)) |
|
|
|
; |
|
|
|
@ -213,7 +225,7 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
List<Guid> organizationUnitIds, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
var result = await GetMongoQueryable() |
|
|
|
var result = await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.Where(u => u.OrganizationUnits.Any(uou => organizationUnitIds.Contains(uou.OrganizationUnitId))) |
|
|
|
.ToListAsync(GetCancellationToken(cancellationToken)) |
|
|
|
; |
|
|
|
@ -224,16 +236,17 @@ namespace Volo.Abp.Identity.MongoDB |
|
|
|
string code, |
|
|
|
CancellationToken cancellationToken = default) |
|
|
|
{ |
|
|
|
var organizationUnitIds = await DbContext.OrganizationUnits.AsQueryable() |
|
|
|
cancellationToken = GetCancellationToken(cancellationToken); |
|
|
|
|
|
|
|
var organizationUnitIds = await (await GetDbContextAsync(cancellationToken)).OrganizationUnits.AsQueryable() |
|
|
|
.Where(ou => ou.Code.StartsWith(code)) |
|
|
|
.Select(ou => ou.Id) |
|
|
|
.ToListAsync(GetCancellationToken(cancellationToken)) |
|
|
|
.ToListAsync(cancellationToken) |
|
|
|
; |
|
|
|
|
|
|
|
return await GetMongoQueryable() |
|
|
|
return await (await GetMongoQueryableAsync(cancellationToken)) |
|
|
|
.Where(u => u.OrganizationUnits.Any(uou => organizationUnitIds.Contains(uou.OrganizationUnitId))) |
|
|
|
.ToListAsync(GetCancellationToken(cancellationToken)) |
|
|
|
; |
|
|
|
.ToListAsync(cancellationToken); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|