added RemoveAllRoles and RemoveAllMembers to organizationUnitRepository

pull/4186/head
Galip Tolga Erdem 5 years ago
parent 5b17e18cdf
commit 2c1d6bfbf5

@ -64,9 +64,20 @@ namespace Volo.Abp.Identity
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetMembersCountAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default
);
Task RemoveAllRolesAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default
);
Task RemoveAllMembersAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default
);
}
}

@ -96,7 +96,6 @@ namespace Volo.Abp.Identity
return IdentityResult.Success;
}
public virtual async Task<bool> IsInOrganizationUnitAsync(Guid userId, Guid ouId)
{
var user = await IdentityUserRepository.GetAsync(userId, cancellationToken: CancellationToken);

@ -152,15 +152,16 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
where userOrg.UserId == id
select ou;
var orgUserRoleQuery = DbContext.Set<OrganizationUnitRole>().Where(q => userOrganizationsQuery.Select(t => t.Id).Contains(q.OrganizationUnitId))
var orgUserRoleQuery = DbContext.Set<OrganizationUnitRole>()
.Where(q => userOrganizationsQuery
.Select(t => t.Id)
.Contains(q.OrganizationUnitId))
.Select(t => t.RoleId);
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(
@ -201,22 +202,18 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
where userOu.OrganizationUnitId == organizationUnitId
select user;
return await query.ToListAsync(GetCancellationToken(cancellationToken));
}
public async Task<List<IdentityUser>> GetUsersInOrganizationsListAsync(
List<Guid> organizationUnitIds,
CancellationToken cancellationToken = default
)
{
//var userIds = DbContext.Set<IdentityUserOrganizationUnit>()
// .Where(q => organizationUnitIds.Contains(q.OrganizationUnitId))
// .Select(u => u.UserId);
//var query = DbContext.Users.Where(u => userIds.Contains(u.Id));
}
public async Task<List<IdentityUser>> GetUsersInOrganizationsListAsync(
List<Guid> organizationUnitIds,
CancellationToken cancellationToken = default
)
{
var query = from userOu in DbContext.Set<IdentityUserOrganizationUnit>()
join user in DbSet on userOu.UserId equals user.Id
where organizationUnitIds.Contains(userOu.OrganizationUnitId)
select user;
return await query.ToListAsync(GetCancellationToken(cancellationToken));
return await query.ToListAsync(GetCancellationToken(cancellationToken));
}
public virtual async Task<List<IdentityUser>> GetUsersInOrganizationUnitWithChildrenAsync(
@ -235,6 +232,6 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
public override IQueryable<IdentityUser> WithDetails()
{
return GetQueryable().IncludeDetails();
}
}
}
}

@ -102,7 +102,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
public virtual async Task<int> GetRolesCountAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default)
{
{
var query = from organizationRole in DbContext.Set<OrganizationUnitRole>()
join role in DbContext.Roles on organizationRole.RoleId equals role.Id
where organizationRole.OrganizationUnitId == organizationUnit.Id
@ -156,5 +156,37 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
{
return GetQueryable().IncludeDetails();
}
public virtual Task RemoveAllRolesAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default)
{
var ouRolesQuery = DbContext.Set<OrganizationUnitRole>()
.Where(q => q.OrganizationUnitId == organizationUnit.Id);
DbContext.Set<OrganizationUnitRole>().RemoveRange(ouRolesQuery);
return Task.FromResult(0);
//Can be long running process that could be made available for cancellation perhaps
//return Task.Run(() =>
// DbContext.Set<OrganizationUnitRole>().RemoveRange(ouRolesQuery),
// GetCancellationToken(cancellationToken)
//);
}
public virtual Task RemoveAllMembersAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default)
{
var ouMembersQuery = DbContext.Set<IdentityUserOrganizationUnit>()
.Where(q => q.OrganizationUnitId == organizationUnit.Id);
DbContext.Set<IdentityUserOrganizationUnit>().RemoveRange(ouMembersQuery);
return Task.FromResult(0);
//Can be long running process that could be made available for cancellation perhaps
//return Task.Run(() =>
// DbContext.Set<IdentityUserOrganizationUnit>().RemoveRange(ouMembersQuery),
// GetCancellationToken(cancellationToken)
//);
}
}
}

@ -1,17 +1,22 @@
using MongoDB.Driver;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using Volo.Abp.Uow;
namespace Volo.Abp.Identity.MongoDB
{
public class MongoOrganizationUnitRepository : MongoDbRepository<IAbpIdentityMongoDbContext, OrganizationUnit, Guid>, IOrganizationUnitRepository
public class MongoOrganizationUnitRepository
: MongoDbRepository<IAbpIdentityMongoDbContext, OrganizationUnit, Guid>,
IOrganizationUnitRepository
{
public MongoOrganizationUnitRepository(
IMongoDbContextProvider<IAbpIdentityMongoDbContext> dbContextProvider)
@ -134,5 +139,30 @@ namespace Volo.Abp.Identity.MongoDB
.As<IMongoQueryable<IdentityUser>>()
.CountAsync(GetCancellationToken(cancellationToken));
}
public virtual Task RemoveAllRolesAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default)
{
organizationUnit.Roles.Clear();
return Task.FromResult(0);
}
public virtual async Task RemoveAllMembersAsync(OrganizationUnit organizationUnit, CancellationToken cancellationToken = default)
{
var users = await DbContext.Users.AsQueryable()
.Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id))
.As<IMongoQueryable<IdentityUser>>()
.ToListAsync(GetCancellationToken(cancellationToken))
;
//var filter = Builders<IdentityUser>.Filter.Where(u => u.OrganizationUnits.Any(uou => uou.OrganizationUnitId == organizationUnit.Id));
//var update = Builders<IdentityUser>.Update.PullFilter(y => y.OrganizationUnits, iou=> iou);
//var result = await DbContext.Users.UpdateManyAsync(filter, update);
for (int i = 0; i < users.Count; i++)
{
users[i].RemoveOrganizationUnit(organizationUnit.Id);
}
}
}
}

@ -151,5 +151,29 @@ namespace Volo.Abp.Identity
rolesCount.ShouldBeGreaterThan(1);
}
[Fact]
public async Task RemoveAllMembersOfOrganizationUnit()
{
OrganizationUnit ou = await _organizationUnitRepository.GetAsync("OU111", true);
var membersCount = await _organizationUnitRepository.GetMembersCountAsync(ou);
membersCount.ShouldBeGreaterThan(1);
await _organizationUnitRepository.RemoveAllMembersAsync(ou);
var newCount = await _organizationUnitRepository.GetMembersCountAsync(ou);
newCount.ShouldBe(0);
}
[Fact]
public async Task RemoveAllRolesOfOrganizationUnit()
{
OrganizationUnit ou = await _organizationUnitRepository.GetAsync("OU111", true);
var rolesCount = await _organizationUnitRepository.GetRolesCountAsync(ou);
rolesCount.ShouldBeGreaterThan(1);
await _organizationUnitRepository.RemoveAllRolesAsync(ou);
var newCount = await _organizationUnitRepository.GetRolesCountAsync(ou);
newCount.ShouldBe(0);
}
}
}

Loading…
Cancel
Save