feat: initialize Evergreen Health backend
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||
//
|
||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core.Service;
|
||||
|
||||
public class RoleInput : BaseIdInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public virtual StatusEnum Status { get; set; }
|
||||
}
|
||||
|
||||
public class PageRoleInput : BasePageInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 租户Id
|
||||
/// </summary>
|
||||
public long TenantId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
public virtual string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 编码
|
||||
/// </summary>
|
||||
public virtual string Code { get; set; }
|
||||
}
|
||||
|
||||
public class AddRoleInput : SysRole
|
||||
{
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
[Required(ErrorMessage = "角色名称不能为空")]
|
||||
public override string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 菜单Id集合
|
||||
/// </summary>
|
||||
public List<long> MenuIdList { get; set; }
|
||||
}
|
||||
|
||||
public class UpdateRoleInput : AddRoleInput
|
||||
{
|
||||
}
|
||||
|
||||
public class DeleteRoleInput : BaseIdInput
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||
//
|
||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core.Service;
|
||||
|
||||
/// <summary>
|
||||
/// 系统角色菜单
|
||||
/// </summary>
|
||||
public class RoleMenuInput : BaseIdInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 菜单Id集合
|
||||
/// </summary>
|
||||
public List<long> MenuIdList { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||
//
|
||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core.Service;
|
||||
|
||||
/// <summary>
|
||||
/// 角色菜单输出参数
|
||||
/// </summary>
|
||||
public class RoleMenuOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// Id
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
public string Title { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||
//
|
||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core.Service;
|
||||
|
||||
/// <summary>
|
||||
/// 授权角色机构
|
||||
/// </summary>
|
||||
public class RoleOrgInput : BaseIdInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 数据范围
|
||||
/// </summary>
|
||||
public int DataScope { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 机构Id集合
|
||||
/// </summary>
|
||||
public List<long> OrgIdList { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||
//
|
||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core.Service;
|
||||
|
||||
/// <summary>
|
||||
/// 角色列表输出参数
|
||||
/// </summary>
|
||||
public class RoleOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// Id
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 名称
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 编码
|
||||
/// </summary>
|
||||
public string Code { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 租户Id
|
||||
/// </summary>
|
||||
public long tenantId { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||
//
|
||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core.Service;
|
||||
|
||||
/// <summary>
|
||||
/// 系统角色菜单服务
|
||||
/// </summary>
|
||||
public class SysRoleMenuService : ITransient
|
||||
{
|
||||
private readonly SqlSugarRepository<SysRoleMenu> _sysRoleMenuRep;
|
||||
private readonly SysCacheService _sysCacheService;
|
||||
|
||||
public SysRoleMenuService(SqlSugarRepository<SysRoleMenu> sysRoleMenuRep,
|
||||
SysCacheService sysCacheService)
|
||||
{
|
||||
_sysRoleMenuRep = sysRoleMenuRep;
|
||||
_sysCacheService = sysCacheService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据角色Id集合获取菜单Id集合
|
||||
/// </summary>
|
||||
/// <param name="roleIdList"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<long>> GetRoleMenuIdList(List<long> roleIdList)
|
||||
{
|
||||
return await _sysRoleMenuRep.AsQueryable()
|
||||
.Where(u => roleIdList.Contains(u.RoleId))
|
||||
.Select(u => u.MenuId).ToListAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 授权角色菜单
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public async Task GrantRoleMenu(RoleMenuInput input)
|
||||
{
|
||||
await _sysRoleMenuRep.DeleteAsync(u => u.RoleId == input.Id);
|
||||
|
||||
// 追加父级菜单
|
||||
var allIdList = await _sysRoleMenuRep.Context.Queryable<SysMenu>().Select(u => new { u.Id, u.Pid }).ToListAsync();
|
||||
var pIdList = allIdList.ToChildList(u => u.Pid, u => u.Id, u => input.MenuIdList.Contains(u.Id)).Select(u => u.Pid).Distinct().ToList();
|
||||
input.MenuIdList = input.MenuIdList.Concat(pIdList).Distinct().Where(u => u != 0).ToList();
|
||||
|
||||
// 保存授权数据
|
||||
var menus = input.MenuIdList.Select(u => new SysRoleMenu
|
||||
{
|
||||
RoleId = input.Id,
|
||||
MenuId = u
|
||||
}).ToList();
|
||||
await _sysRoleMenuRep.InsertRangeAsync(menus);
|
||||
|
||||
// 清除缓存
|
||||
// _sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserMenu);
|
||||
_sysCacheService.RemoveByPrefixKey(CacheConst.KeyUserButton);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据菜单Id集合删除角色菜单
|
||||
/// </summary>
|
||||
/// <param name="menuIdList"></param>
|
||||
/// <returns></returns>
|
||||
public async Task DeleteRoleMenuByMenuIdList(List<long> menuIdList)
|
||||
{
|
||||
await _sysRoleMenuRep.DeleteAsync(u => menuIdList.Contains(u.MenuId));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据角色Id删除角色菜单
|
||||
/// </summary>
|
||||
/// <param name="roleId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task DeleteRoleMenuByRoleId(long roleId)
|
||||
{
|
||||
await _sysRoleMenuRep.DeleteAsync(u => u.RoleId == roleId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||
//
|
||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core.Service;
|
||||
|
||||
/// <summary>
|
||||
/// 系统角色机构服务
|
||||
/// </summary>
|
||||
public class SysRoleOrgService : ITransient
|
||||
{
|
||||
private readonly SqlSugarRepository<SysRoleOrg> _sysRoleOrgRep;
|
||||
|
||||
public SysRoleOrgService(SqlSugarRepository<SysRoleOrg> sysRoleOrgRep)
|
||||
{
|
||||
_sysRoleOrgRep = sysRoleOrgRep;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 授权角色机构
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public async Task GrantRoleOrg(RoleOrgInput input)
|
||||
{
|
||||
await _sysRoleOrgRep.DeleteAsync(u => u.RoleId == input.Id);
|
||||
if (input.DataScope == (int)DataScopeEnum.Define)
|
||||
{
|
||||
var roleOrgList = input.OrgIdList.Select(u => new SysRoleOrg
|
||||
{
|
||||
RoleId = input.Id,
|
||||
OrgId = u
|
||||
}).ToList();
|
||||
await _sysRoleOrgRep.InsertRangeAsync(roleOrgList);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据角色Id集合获取角色机构Id集合
|
||||
/// </summary>
|
||||
/// <param name="roleIdList"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<long>> GetRoleOrgIdList(List<long> roleIdList)
|
||||
{
|
||||
if (roleIdList?.Count > 0)
|
||||
{
|
||||
return await _sysRoleOrgRep.AsQueryable()
|
||||
.Where(u => roleIdList.Contains(u.RoleId))
|
||||
.Select(u => u.OrgId).ToListAsync();
|
||||
}
|
||||
else return new List<long>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据机构Id集合删除角色机构
|
||||
/// </summary>
|
||||
/// <param name="orgIdList"></param>
|
||||
/// <returns></returns>
|
||||
public async Task DeleteRoleOrgByOrgIdList(List<long> orgIdList)
|
||||
{
|
||||
await _sysRoleOrgRep.DeleteAsync(u => orgIdList.Contains(u.OrgId));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据角色Id删除角色机构
|
||||
/// </summary>
|
||||
/// <param name="roleId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task DeleteRoleOrgByRoleId(long roleId)
|
||||
{
|
||||
await _sysRoleOrgRep.DeleteAsync(u => u.RoleId == roleId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,276 @@
|
||||
// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
|
||||
//
|
||||
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
|
||||
//
|
||||
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
|
||||
|
||||
namespace Admin.NET.Core.Service;
|
||||
|
||||
/// <summary>
|
||||
/// 系统角色服务 🧩
|
||||
/// </summary>
|
||||
[ApiDescriptionSettings(Order = 480)]
|
||||
public class SysRoleService : IDynamicApiController, ITransient
|
||||
{
|
||||
private readonly UserManager _userManager;
|
||||
private readonly SqlSugarRepository<SysRole> _sysRoleRep;
|
||||
private readonly SysRoleMenuService _sysRoleMenuService;
|
||||
private readonly SysUserRoleService _sysUserRoleService;
|
||||
private readonly SysRoleOrgService _sysRoleOrgService;
|
||||
private readonly SysMenuService _sysMenuService;
|
||||
private readonly SysOrgService _sysOrgService;
|
||||
private readonly SysCacheService _sysCacheService;
|
||||
|
||||
public SysRoleService(UserManager userManager,
|
||||
SysOrgService sysOrgService,
|
||||
SysMenuService sysMenuService,
|
||||
SysRoleOrgService sysRoleOrgService,
|
||||
SqlSugarRepository<SysRole> sysRoleRep,
|
||||
SysRoleMenuService sysRoleMenuService,
|
||||
SysUserRoleService sysUserRoleService,
|
||||
SysCacheService sysCacheService)
|
||||
{
|
||||
_userManager = userManager;
|
||||
_sysRoleRep = sysRoleRep;
|
||||
_sysOrgService = sysOrgService;
|
||||
_sysMenuService = sysMenuService;
|
||||
_sysRoleOrgService = sysRoleOrgService;
|
||||
_sysRoleMenuService = sysRoleMenuService;
|
||||
_sysUserRoleService = sysUserRoleService;
|
||||
_sysCacheService = sysCacheService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取角色分页列表 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[DisplayName("获取角色分页列表")]
|
||||
public async Task<SqlSugarPagedList<SysRole>> Page(PageRoleInput input)
|
||||
{
|
||||
// 当前用户已拥有的角色集合
|
||||
var roleIdList = _userManager.SuperAdmin ? new List<long>() : await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId);
|
||||
return await _sysRoleRep.AsQueryable()
|
||||
.WhereIF(_userManager.SuperAdmin && input.TenantId > 0, u => u.TenantId == input.TenantId)
|
||||
.WhereIF(!_userManager.SuperAdmin, u => u.TenantId == _userManager.TenantId) // 若非超管,则只能操作本租户的角色
|
||||
.WhereIF(!_userManager.SuperAdmin && !_userManager.SysAdmin, u => u.CreateUserId == _userManager.UserId || roleIdList.Contains(u.Id)) // 若非超管且非系统管理员,则只能操作自己创建的角色|自己拥有的角色
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Name), u => u.Name.Contains(input.Name))
|
||||
.WhereIF(!string.IsNullOrWhiteSpace(input.Code), u => u.Code.Contains(input.Code))
|
||||
.OrderBy(u => new { u.OrderNo, u.Id })
|
||||
.ToPagedListAsync(input.Page, input.PageSize);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取角色列表 🔖
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[DisplayName("获取角色列表")]
|
||||
public async Task<List<RoleOutput>> GetList()
|
||||
{
|
||||
// 当前用户已拥有的角色集合
|
||||
var roleIdList = _userManager.SuperAdmin ? new List<long>() : await _sysUserRoleService.GetUserRoleIdList(_userManager.UserId);
|
||||
|
||||
return await _sysRoleRep.AsQueryable()
|
||||
.WhereIF(!_userManager.SuperAdmin, u => u.TenantId == _userManager.TenantId) // 若非超管,则只能操作本租户的角色
|
||||
.WhereIF(!_userManager.SuperAdmin && !_userManager.SysAdmin, u => u.CreateUserId == _userManager.UserId || roleIdList.Contains(u.Id)) // 若非超管且非系统管理员,则只显示自己创建和已拥有的角色
|
||||
.Where(u => u.Status != StatusEnum.Disable) // 非禁用的
|
||||
.OrderBy(u => new { u.OrderNo, u.Id }).Select<RoleOutput>().ToListAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 增加角色 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[ApiDescriptionSettings(Name = "Add"), HttpPost]
|
||||
[DisplayName("增加角色")]
|
||||
public async Task AddRole(AddRoleInput input)
|
||||
{
|
||||
if (await _sysRoleRep.IsAnyAsync(u => u.Name == input.Name && u.Code == input.Code))
|
||||
throw Oops.Oh(ErrorCodeEnum.D1006);
|
||||
|
||||
var newRole = await _sysRoleRep.AsInsertable(input.Adapt<SysRole>()).ExecuteReturnEntityAsync();
|
||||
input.Id = newRole.Id;
|
||||
await UpdateRoleMenu(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新角色菜单权限
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
private async Task UpdateRoleMenu(AddRoleInput input)
|
||||
{
|
||||
if (input.MenuIdList == null || input.MenuIdList.Count < 1) return;
|
||||
await GrantMenu(new RoleMenuInput()
|
||||
{
|
||||
Id = input.Id,
|
||||
MenuIdList = input.MenuIdList.ToList()
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新角色 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[ApiDescriptionSettings(Name = "Update"), HttpPost]
|
||||
[DisplayName("更新角色")]
|
||||
public async Task UpdateRole(UpdateRoleInput input)
|
||||
{
|
||||
if (await _sysRoleRep.IsAnyAsync(u => u.Name == input.Name && u.Code == input.Code && u.Id != input.Id))
|
||||
throw Oops.Oh(ErrorCodeEnum.D1006);
|
||||
|
||||
await _sysRoleRep.AsUpdateable(input.Adapt<SysRole>()).IgnoreColumns(true)
|
||||
.IgnoreColumns(u => new { u.DataScope }).ExecuteCommandAsync();
|
||||
|
||||
await UpdateRoleMenu(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除角色 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[UnitOfWork]
|
||||
[ApiDescriptionSettings(Name = "Delete"), HttpPost]
|
||||
[DisplayName("删除角色")]
|
||||
public async Task DeleteRole(DeleteRoleInput input)
|
||||
{
|
||||
// 若角色有用户则禁止删除
|
||||
var userIds = await _sysUserRoleService.GetUserIdList(input.Id);
|
||||
if (userIds != null && userIds.Count > 0) throw Oops.Oh(ErrorCodeEnum.D1025);
|
||||
|
||||
// 若有绑定注册方案则禁止删除
|
||||
var hasUserRegWay = await _sysRoleRep.Context.Queryable<SysUserRegWay>().AnyAsync(u => u.RoleId == input.Id);
|
||||
if (hasUserRegWay) throw Oops.Oh(ErrorCodeEnum.D1033);
|
||||
|
||||
var sysRole = await _sysRoleRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
|
||||
await _sysRoleRep.DeleteAsync(sysRole);
|
||||
|
||||
// 级联删除角色机构数据
|
||||
await _sysRoleOrgService.DeleteRoleOrgByRoleId(sysRole.Id);
|
||||
|
||||
// 级联删除用户角色数据
|
||||
await _sysUserRoleService.DeleteUserRoleByRoleId(sysRole.Id);
|
||||
|
||||
// 级联删除角色菜单数据
|
||||
await _sysRoleMenuService.DeleteRoleMenuByRoleId(sysRole.Id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 授权角色菜单 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[UnitOfWork]
|
||||
[DisplayName("授权角色菜单")]
|
||||
public async Task GrantMenu(RoleMenuInput input)
|
||||
{
|
||||
if (input.MenuIdList == null || input.MenuIdList.Count < 1) return;
|
||||
|
||||
await ClearUserApiCache(input.Id);
|
||||
|
||||
await _sysRoleMenuService.GrantRoleMenu(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 授权角色数据范围 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[UnitOfWork]
|
||||
[DisplayName("授权角色数据范围")]
|
||||
public async Task GrantDataScope(RoleOrgInput input)
|
||||
{
|
||||
// 删除与该角色相关的用户机构缓存
|
||||
var userIdList = await _sysUserRoleService.GetUserIdList(input.Id);
|
||||
foreach (var userId in userIdList)
|
||||
{
|
||||
SqlSugarFilter.DeleteUserOrgCache(userId, _sysRoleRep.Context.CurrentConnectionConfig.ConfigId.ToString());
|
||||
}
|
||||
|
||||
var role = await _sysRoleRep.GetFirstAsync(u => u.Id == input.Id);
|
||||
var dataScope = input.DataScope;
|
||||
if (!_userManager.SuperAdmin)
|
||||
{
|
||||
switch (dataScope)
|
||||
{
|
||||
// 非超级管理员没有全部数据范围权限
|
||||
case (int)DataScopeEnum.All: throw Oops.Oh(ErrorCodeEnum.D1016);
|
||||
// 若数据范围自定义,则判断授权数据范围是否有权限
|
||||
case (int)DataScopeEnum.Define:
|
||||
{
|
||||
var grantOrgIdList = input.OrgIdList;
|
||||
if (grantOrgIdList.Count > 0)
|
||||
{
|
||||
var orgIdList = await _sysOrgService.GetUserOrgIdList();
|
||||
if (orgIdList.Count < 1)
|
||||
throw Oops.Oh(ErrorCodeEnum.D1016);
|
||||
if (!grantOrgIdList.All(u => orgIdList.Any(c => c == u)))
|
||||
throw Oops.Oh(ErrorCodeEnum.D1016);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
role.DataScope = (DataScopeEnum)dataScope;
|
||||
await _sysRoleRep.AsUpdateable(role).UpdateColumns(u => new { u.DataScope }).ExecuteCommandAsync();
|
||||
await _sysRoleOrgService.GrantRoleOrg(input);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据角色Id获取菜单Id集合 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[DisplayName("根据角色Id获取菜单Id集合")]
|
||||
public async Task<List<long>> GetOwnMenuList([FromQuery] RoleInput input)
|
||||
{
|
||||
var menuIds = await _sysRoleMenuService.GetRoleMenuIdList(new List<long> { input.Id });
|
||||
return await _sysMenuService.ExcludeParentMenuOfFullySelected(menuIds);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据角色Id获取机构Id集合 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[DisplayName("根据角色Id获取机构Id集合")]
|
||||
public async Task<List<long>> GetOwnOrgList([FromQuery] RoleInput input)
|
||||
{
|
||||
return await _sysRoleOrgService.GetRoleOrgIdList(new List<long> { input.Id });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置角色状态 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[DisplayName("设置角色状态")]
|
||||
public async Task<int> SetStatus(RoleInput input)
|
||||
{
|
||||
if (!Enum.IsDefined(typeof(StatusEnum), input.Status)) throw Oops.Oh(ErrorCodeEnum.D3005);
|
||||
|
||||
return await _sysRoleRep.AsUpdateable()
|
||||
.SetColumns(u => u.Status == input.Status)
|
||||
.Where(u => u.Id == input.Id)
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除与该角色相关的用户接口缓存
|
||||
/// </summary>
|
||||
/// <param name="roleId"></param>
|
||||
/// <returns></returns>
|
||||
[NonAction]
|
||||
public async Task ClearUserApiCache(long roleId)
|
||||
{
|
||||
var userIdList = await _sysUserRoleService.GetUserIdList(roleId);
|
||||
foreach (var userId in userIdList)
|
||||
{
|
||||
_sysCacheService.Remove($"{CacheConst.KeyUserButton}{userId}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user