Browse Source

fixed unit roles not getting when all roles are requested from EfCoreIdentityUserRepository

pull/3732/head
Galip Tolga Erdem 7 years ago
parent
commit
29dbcb08ab
  1. 4
      modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj
  2. 48
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs

4
modules/identity/src/Volo.Abp.Identity.Domain/Volo.Abp.Identity.Domain.csproj

@ -33,8 +33,4 @@
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="3.1.2" /> <PackageReference Include="Microsoft.Extensions.Identity.Core" Version="3.1.2" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Volo\Abp\Identity\Organizations\" />
</ItemGroup>
</Project> </Project>

48
modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs

@ -6,6 +6,7 @@ using System.Security.Claims;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Internal;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
@ -19,7 +20,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
} }
public virtual async Task<IdentityUser> FindByNormalizedUserNameAsync( public virtual async Task<IdentityUser> FindByNormalizedUserNameAsync(
string normalizedUserName, string normalizedUserName,
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
@ -32,7 +33,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
} }
public virtual async Task<List<string>> GetRoleNamesAsync( public virtual async Task<List<string>> GetRoleNamesAsync(
Guid id, Guid id,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var query = from userRole in DbContext.Set<IdentityUserRole>() var query = from userRole in DbContext.Set<IdentityUserRole>()
@ -57,8 +58,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
} }
public virtual async Task<IdentityUser> FindByLoginAsync( public virtual async Task<IdentityUser> FindByLoginAsync(
string loginProvider, string loginProvider,
string providerKey, string providerKey,
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
@ -90,7 +91,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
} }
public virtual async Task<List<IdentityUser>> GetListByNormalizedRoleNameAsync( public virtual async Task<List<IdentityUser>> GetListByNormalizedRoleNameAsync(
string normalizedRoleName, string normalizedRoleName,
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
@ -110,10 +111,10 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
} }
public virtual async Task<List<IdentityUser>> GetListAsync( public virtual async Task<List<IdentityUser>> GetListAsync(
string sorting = null, string sorting = null,
int maxResultCount = int.MaxValue, int maxResultCount = int.MaxValue,
int skipCount = 0, int skipCount = 0,
string filter = null, string filter = null,
bool includeDetails = false, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
@ -138,22 +139,27 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
var query = from userRole in DbContext.Set<IdentityUserRole>() var query = from userRole in DbContext.Set<IdentityUserRole>()
join role in DbContext.Roles.IncludeDetails(includeDetails) on userRole.RoleId equals role.Id join role in DbContext.Roles.IncludeDetails(includeDetails) on userRole.RoleId equals role.Id
where userRole.UserId == id where userRole.UserId == id
select role; select role;
//TODO
//var q2 = from userOrganization in DbContext.Set<IdentityUserOrganizationUnit>() //TODO: Needs improvement
// join userOrg in DbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOrganization.UserId equals id var userOrganizationsQuery = from userOrg in DbContext.Set<IdentityUserOrganizationUnit>()
// select userOrg.Roles; join ou in DbContext.OrganizationUnits.IncludeDetails(includeDetails) on userOrg.OrganizationUnitId equals ou.Id
//var q3 = from ouRole in DbContext.Set<OrganizationUnitRole>() where userOrg.UserId == id
// join role in DbContext.Roles.IncludeDetails(includeDetails) on ouRole.RoleId equals role.Id select ou;
// where ouRole.RoleId == id
// select role; var orgUserRoleQuery = DbContext.Set<OrganizationUnitRole>().Where(q => userOrganizationsQuery.Select(t => t.Id).Contains(q.OrganizationUnitId))
//query = q2.Union(query); .Select(t => t.RoleId);
return await query.ToListAsync(GetCancellationToken(cancellationToken)); var orgRoles = DbContext.Roles.Where(q => orgUserRoleQuery.Contains(q.Id));
var resultQuery = query.Union(orgRoles);
return await resultQuery.ToListAsync(GetCancellationToken(cancellationToken));
//return await query.ToListAsync(GetCancellationToken(cancellationToken));
} }
public virtual async Task<long> GetCountAsync( public virtual async Task<long> GetCountAsync(
string filter = null, string filter = null,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await this.WhereIf( return await this.WhereIf(

Loading…
Cancel
Save