You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
236 lines
11 KiB
236 lines
11 KiB
using Microsoft.AspNetCore.Authorization; |
|
using Sanhe.Abp.Identity.Dto; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Threading.Tasks; |
|
using Volo.Abp.Application.Dtos; |
|
using Volo.Abp.Identity; |
|
using Volo.Abp.ObjectExtending; |
|
|
|
namespace Sanhe.Abp.Identity |
|
{ |
|
[Authorize(IdentityPermissions.OrganizationUnits.Default)] |
|
public class OrganizationUnitAppService : IdentityAppServiceBase, IOrganizationUnitAppService |
|
{ |
|
protected OrganizationUnitManager OrganizationUnitManager { get; } |
|
protected IOrganizationUnitRepository OrganizationUnitRepository { get; } |
|
|
|
protected IdentityUserManager UserManager { get; } |
|
protected IIdentityRoleRepository RoleRepository { get; } |
|
protected IIdentityUserRepository UserRepository { get; } |
|
|
|
public OrganizationUnitAppService( |
|
IdentityUserManager userManager, |
|
IIdentityRoleRepository roleRepository, |
|
IIdentityUserRepository userRepository, |
|
OrganizationUnitManager organizationUnitManager, |
|
IOrganizationUnitRepository organizationUnitRepository) |
|
{ |
|
UserManager = userManager; |
|
RoleRepository = roleRepository; |
|
UserRepository = userRepository; |
|
OrganizationUnitManager = organizationUnitManager; |
|
OrganizationUnitRepository = organizationUnitRepository; |
|
|
|
ObjectMapperContext = typeof(AbpIdentityApplicationModule); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.Create)] |
|
public virtual async Task<OrganizationUnitDto> CreateAsync(OrganizationUnitCreateDto input) |
|
{ |
|
var organizationUnit = new OrganizationUnit( |
|
GuidGenerator.Create(), input.DisplayName, input.ParentId, CurrentTenant.Id) |
|
{ |
|
CreationTime = Clock.Now |
|
}; |
|
input.MapExtraPropertiesTo(organizationUnit); |
|
|
|
await OrganizationUnitManager.CreateAsync(organizationUnit); |
|
await CurrentUnitOfWork.SaveChangesAsync(); |
|
|
|
return ObjectMapper.Map<OrganizationUnit, OrganizationUnitDto>(organizationUnit); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.Delete)] |
|
public virtual async Task DeleteAsync(Guid id) |
|
{ |
|
var organizationUnit = await OrganizationUnitRepository.FindAsync(id); |
|
if (organizationUnit == null) |
|
{ |
|
return; |
|
} |
|
await OrganizationUnitManager.DeleteAsync(id); |
|
} |
|
|
|
public virtual async Task<ListResultDto<OrganizationUnitDto>> GetRootAsync() |
|
{ |
|
var rootorganizationUnits = await OrganizationUnitManager.FindChildrenAsync(null, recursive: false); |
|
|
|
return new ListResultDto<OrganizationUnitDto>( |
|
ObjectMapper.Map<List<OrganizationUnit>, List<OrganizationUnitDto>>(rootorganizationUnits)); |
|
} |
|
|
|
public virtual async Task<ListResultDto<OrganizationUnitDto>> FindChildrenAsync(OrganizationUnitGetChildrenDto input) |
|
{ |
|
var organizationUnitChildren = await OrganizationUnitManager.FindChildrenAsync(input.Id, input.Recursive); |
|
|
|
return new ListResultDto<OrganizationUnitDto>( |
|
ObjectMapper.Map<List<OrganizationUnit>, List<OrganizationUnitDto>>(organizationUnitChildren)); |
|
} |
|
|
|
public virtual async Task<OrganizationUnitDto> GetAsync(Guid id) |
|
{ |
|
var organizationUnit = await OrganizationUnitRepository.FindAsync(id); |
|
|
|
return ObjectMapper.Map<OrganizationUnit, OrganizationUnitDto>(organizationUnit); |
|
} |
|
|
|
public virtual async Task<OrganizationUnitDto> GetLastChildOrNullAsync(Guid? parentId) |
|
{ |
|
var organizationUnitLastChildren = await OrganizationUnitManager.GetLastChildOrNullAsync(parentId); |
|
|
|
return ObjectMapper.Map<OrganizationUnit, OrganizationUnitDto>(organizationUnitLastChildren); |
|
} |
|
|
|
public virtual async Task<ListResultDto<OrganizationUnitDto>> GetAllListAsync() |
|
{ |
|
var organizationUnits = await OrganizationUnitRepository.GetListAsync(false); |
|
|
|
return new ListResultDto<OrganizationUnitDto>( |
|
ObjectMapper.Map<List<OrganizationUnit>, List<OrganizationUnitDto>>(organizationUnits)); |
|
} |
|
|
|
public virtual async Task<PagedResultDto<OrganizationUnitDto>> GetListAsync(OrganizationUnitGetByPagedDto input) |
|
{ |
|
var organizationUnitCount = await OrganizationUnitRepository.GetCountAsync(); |
|
var organizationUnits = await OrganizationUnitRepository |
|
.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, false); |
|
|
|
return new PagedResultDto<OrganizationUnitDto>(organizationUnitCount, |
|
ObjectMapper.Map<List<OrganizationUnit>, List<OrganizationUnitDto>>(organizationUnits)); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.ManageRoles)] |
|
public virtual async Task<ListResultDto<string>> GetRoleNamesAsync(Guid id) |
|
{ |
|
var inOrignizationUnitRoleNames = await UserRepository.GetRoleNamesInOrganizationUnitAsync(id); |
|
return new ListResultDto<string>(inOrignizationUnitRoleNames); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.ManageRoles)] |
|
public virtual async Task<PagedResultDto<IdentityRoleDto>> GetUnaddedRolesAsync(Guid id, OrganizationUnitGetUnaddedRoleByPagedDto input) |
|
{ |
|
var organizationUnit = await OrganizationUnitRepository.GetAsync(id); |
|
|
|
var organizationUnitRoleCount = await OrganizationUnitRepository |
|
.GetUnaddedRolesCountAsync(organizationUnit, input.Filter); |
|
|
|
var organizationUnitRoles = await OrganizationUnitRepository |
|
.GetUnaddedRolesAsync(organizationUnit, |
|
input.Sorting, input.MaxResultCount, |
|
input.SkipCount, input.Filter); |
|
|
|
return new PagedResultDto<IdentityRoleDto>(organizationUnitRoleCount, |
|
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(organizationUnitRoles)); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.ManageRoles)] |
|
public virtual async Task<PagedResultDto<IdentityRoleDto>> GetRolesAsync(Guid id, PagedAndSortedResultRequestDto input) |
|
{ |
|
var organizationUnit = await OrganizationUnitRepository.GetAsync(id); |
|
|
|
var organizationUnitRoleCount = await OrganizationUnitRepository |
|
.GetRolesCountAsync(organizationUnit); |
|
|
|
var organizationUnitRoles = await OrganizationUnitRepository |
|
.GetRolesAsync(organizationUnit, |
|
input.Sorting, input.MaxResultCount, |
|
input.SkipCount); |
|
|
|
return new PagedResultDto<IdentityRoleDto>(organizationUnitRoleCount, |
|
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(organizationUnitRoles)); |
|
} |
|
|
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.ManageUsers)] |
|
public virtual async Task<PagedResultDto<IdentityUserDto>> GetUnaddedUsersAsync(Guid id, OrganizationUnitGetUnaddedUserByPagedDto input) |
|
{ |
|
var organizationUnit = await OrganizationUnitRepository.GetAsync(id); |
|
|
|
var organizationUnitUserCount = await OrganizationUnitRepository |
|
.GetUnaddedUsersCountAsync(organizationUnit, input.Filter); |
|
var organizationUnitUsers = await OrganizationUnitRepository |
|
.GetUnaddedUsersAsync(organizationUnit, |
|
input.Sorting, input.MaxResultCount, |
|
input.SkipCount, input.Filter); |
|
|
|
return new PagedResultDto<IdentityUserDto>(organizationUnitUserCount, |
|
ObjectMapper.Map<List<IdentityUser>, List<IdentityUserDto>>(organizationUnitUsers)); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.ManageUsers)] |
|
public virtual async Task<PagedResultDto<IdentityUserDto>> GetUsersAsync(Guid id, GetIdentityUsersInput input) |
|
{ |
|
var organizationUnit = await OrganizationUnitRepository.GetAsync(id); |
|
|
|
var organizationUnitUserCount = await OrganizationUnitRepository |
|
.GetMembersCountAsync(organizationUnit, input.Filter); |
|
var organizationUnitUsers = await OrganizationUnitRepository |
|
.GetMembersAsync(organizationUnit, |
|
input.Sorting, input.MaxResultCount, |
|
input.SkipCount, input.Filter); |
|
|
|
return new PagedResultDto<IdentityUserDto>(organizationUnitUserCount, |
|
ObjectMapper.Map<List<IdentityUser>, List<IdentityUserDto>>(organizationUnitUsers)); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.Update)] |
|
public virtual async Task MoveAsync(Guid id, OrganizationUnitMoveDto input) |
|
{ |
|
await OrganizationUnitManager.MoveAsync(id, input.ParentId); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.Update)] |
|
public virtual async Task<OrganizationUnitDto> UpdateAsync(Guid id, OrganizationUnitUpdateDto input) |
|
{ |
|
var organizationUnit = await OrganizationUnitRepository.GetAsync(id); |
|
organizationUnit.DisplayName = input.DisplayName; |
|
input.MapExtraPropertiesTo(organizationUnit); |
|
|
|
await OrganizationUnitManager.UpdateAsync(organizationUnit); |
|
await CurrentUnitOfWork.SaveChangesAsync(); |
|
|
|
return ObjectMapper.Map<OrganizationUnit, OrganizationUnitDto>(organizationUnit); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.ManageUsers)] |
|
public virtual async Task AddUsersAsync(Guid id, OrganizationUnitAddUserDto input) |
|
{ |
|
var organizationUnit = await OrganizationUnitRepository.GetAsync(id); |
|
var users = await UserRepository.GetListByIdListAsync(input.UserIds, includeDetails: true); |
|
|
|
// 调用内部方法设置用户组织机构 |
|
foreach (var user in users) |
|
{ |
|
await UserManager.AddToOrganizationUnitAsync(user, organizationUnit); |
|
} |
|
|
|
await CurrentUnitOfWork.SaveChangesAsync(); |
|
} |
|
|
|
[Authorize(IdentityPermissions.OrganizationUnits.ManageRoles)] |
|
public virtual async Task AddRolesAsync(Guid id, OrganizationUnitAddRoleDto input) |
|
{ |
|
var organizationUnit = await OrganizationUnitRepository.GetAsync(id); |
|
|
|
var roles = await RoleRepository.GetListByIdListAsync(input.RoleIds, includeDetails: true); |
|
|
|
foreach (var role in roles) |
|
{ |
|
await OrganizationUnitManager.AddRoleToOrganizationUnitAsync(role, organizationUnit); |
|
} |
|
|
|
await CurrentUnitOfWork.SaveChangesAsync(); |
|
} |
|
} |
|
}
|
|
|