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.
141 lines
4.8 KiB
141 lines
4.8 KiB
using Mapster;
|
|
using SqlSugar;
|
|
using Wood.Data.Repository;
|
|
using Wood.Entity;
|
|
using Wood.Entity.SystemManage;
|
|
using Wood.Service.BaseService;
|
|
using Wood.Service.SystemManage.Dto;
|
|
using Wood.Service.SystemManage.Param;
|
|
using Wood.Util;
|
|
|
|
namespace Wood.Service.SystemManage
|
|
{
|
|
/// <summary>
|
|
/// 角色管理
|
|
/// </summary>
|
|
public class RoleService : ApiService
|
|
{
|
|
private readonly SqlSugarRepository<RoleEntity> _roleRepository;
|
|
private readonly SqlSugarRepository<MenuAuthorizeEntity> _menuAuthorizeRepository;
|
|
private readonly SqlSugarRepository<RoleDataScopeEntity> _roleDataScopeRepository;
|
|
private readonly SqlSugarRepository<UserBelongRoleEntity> _userBelongRoleRepository;
|
|
public RoleService(SqlSugarRepository<RoleEntity> roleRepository, SqlSugarRepository<MenuAuthorizeEntity> menuAuthorizeRepository, SqlSugarRepository<RoleDataScopeEntity> roleDataScopeRepository, SqlSugarRepository<UserBelongRoleEntity> userBelongRoleRepository)
|
|
{
|
|
_roleRepository = roleRepository;
|
|
_menuAuthorizeRepository = menuAuthorizeRepository;
|
|
_roleDataScopeRepository = roleDataScopeRepository;
|
|
_userBelongRoleRepository = userBelongRoleRepository;
|
|
}
|
|
|
|
public async Task<TDataPaged<RolePagedDto>> Paged(RolePagedParam param)
|
|
{
|
|
return await _roleRepository.AsQueryable()
|
|
.WhereIF(!string.IsNullOrEmpty(param.Name), it => it.RoleName.Contains(param.Name!) || it.FormCode.Contains(param.Name!))
|
|
.Select(it => new RolePagedDto()
|
|
{
|
|
Id = it.Id.SelectAll()
|
|
})
|
|
.ToPagedListAsync(param);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取角色信息列表用于选择
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public async Task<List<ElSelectDto>> SelectList()
|
|
{
|
|
return await _roleRepository.AsQueryable()
|
|
.Where(it => it.Status == 1)
|
|
.Select(it => new ElSelectDto()
|
|
{
|
|
Label = it.RoleName,
|
|
Disabled = false,
|
|
Value = it.Id.ToString()
|
|
}).ToListAsync();
|
|
}
|
|
|
|
public async Task<RoleDetailDto> GetDetail(BaseIdParam param)
|
|
{
|
|
var entity = await _roleRepository.GetByIdAsync(param.Id);
|
|
var dto = entity.Adapt<RoleDetailDto>();
|
|
|
|
dto.Menus = await _menuAuthorizeRepository.AsQueryable()
|
|
.LeftJoin<MenuEntity>((it,me)=>it.MenuId==me.Id)
|
|
.Where((it,me) => it.RoleId == param.Id&&me.MenuType!=MenuTypeEnum.Button).Select(it => it.MenuId).ToListAsync();
|
|
|
|
dto.Btns = await _menuAuthorizeRepository.AsQueryable()
|
|
.LeftJoin<MenuEntity>((it, me) => it.MenuId == me.Id)
|
|
.Where((it, me) => it.RoleId == param.Id && me.MenuType == MenuTypeEnum.Button).Select(it => it.MenuId).ToListAsync();
|
|
|
|
dto.Orgs = await _roleDataScopeRepository.AsQueryable().Where(it => it.RoleId == param.Id).Select(it => it.OrgId).ToListAsync();
|
|
return dto;
|
|
}
|
|
|
|
public async Task<int> GetMaxSort()
|
|
{
|
|
var result = await _roleRepository.AsQueryable().MaxAsync(it => it.Sort);
|
|
return result + 10;
|
|
}
|
|
|
|
[UnitOfWork]
|
|
public async Task Add(RoleAddParam entity)
|
|
{
|
|
await _roleRepository.InsertAsync(entity.Adapt<RoleEntity>());
|
|
|
|
await _menuAuthorizeRepository.InsertRangeAsync(
|
|
entity.Menus.Select(it => new MenuAuthorizeEntity() { RoleId = entity.Id, MenuId = it }).ToList()
|
|
);
|
|
}
|
|
|
|
[UnitOfWork]
|
|
public async Task Update(RoleUpdateParam entity)
|
|
{
|
|
await _roleRepository.UpdateAsync(entity.Adapt<RoleEntity>());
|
|
await _menuAuthorizeRepository.DeleteAsync(it => it.RoleId == entity.Id);
|
|
await _menuAuthorizeRepository.InsertRangeAsync(
|
|
entity.Menus.Select(it => new MenuAuthorizeEntity() { RoleId = entity.Id, MenuId = it }).ToList()
|
|
);
|
|
}
|
|
/// <summary>
|
|
/// 更新数据权限
|
|
/// </summary>
|
|
/// <param name="param"></param>
|
|
/// <returns></returns>
|
|
[UnitOfWork]
|
|
public async Task UpdateRoleDataType(RoleUpdateDataTypeParam param)
|
|
{
|
|
var role = await _roleRepository.GetByIdAsync(param.Id);
|
|
role.DataScopeType = param.DataScopeType;
|
|
await _roleRepository.UpdateAsync(role);
|
|
await _roleDataScopeRepository.DeleteAsync(it => it.RoleId == param.Id);
|
|
if (role.DataScopeType == DataScopeTypeEnum.Custom)
|
|
{
|
|
var scopeList = param.Orgs.Select(it => new RoleDataScopeEntity() { OrgId = it, RoleId = param.Id }).ToList();
|
|
|
|
await _roleDataScopeRepository.InsertRangeAsync(scopeList);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除角色
|
|
/// </summary>
|
|
/// <param name="param"></param>
|
|
/// <returns></returns>
|
|
[UnitOfWork]
|
|
public async Task Delete(BaseIdListParam param)
|
|
{
|
|
//删除角色信息
|
|
await _roleRepository.DeleteAsync(it => param.Ids.Contains(it.Id));
|
|
//删除角色授权菜单信息
|
|
await _menuAuthorizeRepository.DeleteAsync(it => param.Ids.Contains(it.RoleId));
|
|
//删除角色数据范围信息
|
|
await _roleDataScopeRepository.DeleteAsync(it => param.Ids.Contains(it.RoleId));
|
|
//删除用户角色信息
|
|
await _userBelongRoleRepository.DeleteAsync(it => param.Ids.Contains(it.RoleId));
|
|
}
|
|
|
|
#region 私有方法
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
|