shgx_tz_mom/ZR.Service/System/SysRoleService.cs

366 lines
12 KiB
C#
Raw Normal View History

2021-08-23 16:57:25 +08:00
using Infrastructure;
using Infrastructure.Attribute;
2022-10-20 18:30:05 +08:00
using SqlSugar;
2021-08-23 16:57:25 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
2021-10-11 22:03:54 +08:00
using ZR.Model;
2021-08-23 16:57:25 +08:00
using ZR.Model.System;
2022-10-20 18:30:05 +08:00
using ZR.Repository;
2021-09-16 19:35:17 +08:00
using ZR.Service.System.IService;
2021-08-23 16:57:25 +08:00
namespace ZR.Service
{
/// <summary>
/// 角色
/// </summary>
[AppService(ServiceType = typeof(ISysRoleService), ServiceLifetime = LifeTime.Transient)]
2021-12-12 13:35:16 +08:00
public class SysRoleService : BaseService<SysRole>, ISysRoleService
2021-08-23 16:57:25 +08:00
{
private ISysUserRoleService SysUserRoleService;
2022-01-22 20:47:48 +08:00
private ISysDeptService DeptService;
2022-10-20 18:30:05 +08:00
private ISysRoleMenuService RoleMenuService;
2021-08-23 16:57:25 +08:00
public SysRoleService(
2022-01-22 20:47:48 +08:00
ISysUserRoleService sysUserRoleService,
2022-10-20 18:30:05 +08:00
ISysDeptService deptService,
ISysRoleMenuService roleMenuService)
2021-08-23 16:57:25 +08:00
{
SysUserRoleService = sysUserRoleService;
2022-01-22 20:47:48 +08:00
DeptService = deptService;
2022-10-20 18:30:05 +08:00
RoleMenuService = roleMenuService;
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 根据条件分页查询角色数据
/// </summary>
2022-10-20 18:30:05 +08:00
/// <param name="sysRole">角色信息</param>
2022-01-22 20:47:48 +08:00
/// <param name="pager">分页信息</param>
2021-08-23 16:57:25 +08:00
/// <returns>角色数据集合信息</returns>
2022-10-20 18:30:05 +08:00
public PagedInfo<SysRole> SelectRoleList(SysRole sysRole, PagerInfo pager)
2021-08-23 16:57:25 +08:00
{
2022-10-20 18:30:05 +08:00
var exp = Expressionable.Create<SysRole>();
exp.And(role => role.DelFlag == "0");
exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleName), role => role.RoleName.Contains(sysRole.RoleName));
exp.AndIF(!string.IsNullOrEmpty(sysRole.Status), role => role.Status == sysRole.Status);
exp.AndIF(!string.IsNullOrEmpty(sysRole.RoleKey), role => role.RoleKey == sysRole.RoleKey);
var query = Context.Queryable<SysRole>()
.Where(exp.ToExpression())
.OrderBy(x => x.RoleSort)
.Select((role) => new SysRole
{
RoleId = role.RoleId.SelectAll(),
UserNum = SqlFunc.Subqueryable<SysUserRole>().Where(f => f.RoleId == role.RoleId).Count()
});
return query.ToPage(pager);
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 查询所有角色
/// </summary>
/// <returns></returns>
public List<SysRole> SelectRoleAll()
{
2022-10-20 18:30:05 +08:00
return Queryable()
.Where(role => role.DelFlag == "0")
.OrderBy(role => role.RoleSort)
.ToList();
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 根据用户查询
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<SysRole> SelectRolePermissionByUserId(long userId)
{
2022-10-20 18:30:05 +08:00
return Queryable()
.Where(role => role.DelFlag == "0")
.Where(it => SqlFunc.Subqueryable<SysUserRole>().Where(s => s.UserId == userId).Any())
.OrderBy(role => role.RoleSort)
.ToList();
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 通过角色ID查询角色
/// </summary>
/// <param name="roleId">角色ID</param>
/// <returns>角色对象信息</returns>
public SysRole SelectRoleById(long roleId)
{
2022-10-20 18:30:05 +08:00
return GetId(roleId);
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 批量删除角色信息
/// </summary>
/// <param name="roleIds">需要删除的角色ID</param>
/// <returns></returns>
public int DeleteRoleByRoleId(long[] roleIds)
{
foreach (var item in roleIds)
{
CheckRoleAllowed(new SysRole(item));
SysRole role = SelectRoleById(item);
if (SysUserRoleService.CountUserRoleByRoleId(item) > 0)
{
throw new CustomException($"{role.RoleName}已分配,不能删除");
}
}
2022-10-20 18:30:05 +08:00
return Delete(roleIds);
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 更改角色权限状态
/// </summary>
2022-10-20 18:30:05 +08:00
/// <param name="roleDto"></param>
2021-08-23 16:57:25 +08:00
/// <returns></returns>
public int UpdateRoleStatus(SysRole roleDto)
{
2022-10-20 18:30:05 +08:00
return Update(roleDto, it => new { it.Status }, f => f.RoleId == roleDto.RoleId);
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 校验角色权限是否唯一
/// </summary>
/// <param name="sysRole">角色信息</param>
/// <returns></returns>
public string CheckRoleKeyUnique(SysRole sysRole)
{
long roleId = 0 == sysRole.RoleId ? -1L : sysRole.RoleId;
2022-10-20 18:30:05 +08:00
SysRole info = GetFirst(it => it.RoleKey == sysRole.RoleKey);
2021-08-23 16:57:25 +08:00
if (info != null && info.RoleId != roleId)
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/// <summary>
/// 校验角色是否允许操作
/// </summary>
/// <param name="role"></param>
public void CheckRoleAllowed(SysRole role)
{
2021-12-17 15:03:33 +08:00
if (IsRoleAdmin(role.RoleId))
2021-08-23 16:57:25 +08:00
{
throw new CustomException("不允许操作超级管理员角色");
}
}
/// <summary>
/// 新增保存角色信息
/// </summary>
/// <param name="sysRole">角色信息</param>
/// <returns></returns>
public long InsertRole(SysRole sysRole)
{
2022-10-20 18:30:05 +08:00
sysRole.Create_time = DateTime.Now;
sysRole.RoleId = InsertReturnBigIdentity(sysRole);
2022-09-27 20:47:37 +08:00
//插入角色部门数据
DeptService.InsertRoleDepts(sysRole);
return sysRole.RoleId;
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 通过角色ID删除角色和菜单关联
/// </summary>
/// <param name="roleId">角色ID</param>
/// <returns></returns>
public int DeleteRoleMenuByRoleId(long roleId)
{
2022-10-20 18:30:05 +08:00
return RoleMenuService.DeleteRoleMenuByRoleId(roleId);
2021-08-23 16:57:25 +08:00
}
2021-12-26 18:26:38 +08:00
/// <summary>
/// 修改数据权限信息
/// </summary>
/// <param name="sysRoleDto"></param>
/// <returns></returns>
public bool AuthDataScope(SysRole sysRoleDto)
{
return UseTran2(() =>
{
//删除角色菜单
DeleteRoleMenuByRoleId(sysRoleDto.RoleId);
InsertRoleMenu(sysRoleDto);
});
}
2021-08-23 16:57:25 +08:00
#region Service
/// <summary>
2021-12-26 18:26:38 +08:00
/// 批量新增角色菜单信息
2021-08-23 16:57:25 +08:00
/// </summary>
/// <param name="sysRoleDto"></param>
/// <returns></returns>
public int InsertRoleMenu(SysRole sysRoleDto)
{
int rows = 1;
// 新增用户与角色管理
List<SysRoleMenu> sysRoleMenus = new List<SysRoleMenu>();
foreach (var item in sysRoleDto.MenuIds)
{
2022-01-22 20:47:48 +08:00
SysRoleMenu rm = new SysRoleMenu
{
Menu_id = item,
Role_id = sysRoleDto.RoleId,
Create_by = sysRoleDto.Create_by,
Create_time = DateTime.Now
};
2021-08-23 16:57:25 +08:00
sysRoleMenus.Add(rm);
}
//添加角色菜单
if (sysRoleMenus.Count > 0)
{
2022-10-20 18:30:05 +08:00
rows = RoleMenuService.AddRoleMenu(sysRoleMenus);
2021-08-23 16:57:25 +08:00
}
return rows;
}
/// <summary>
/// 判断是否是管理员
/// </summary>
/// <param name="userid"></param>
/// <returns></returns>
public bool IsAdmin(long userid)
{
List<string> roles = SelectUserRoleKeys(userid);
2022-10-20 18:30:05 +08:00
return ((IList)roles).Contains(GlobalConstant.AdminRole);
2021-08-23 16:57:25 +08:00
}
2021-12-17 15:03:33 +08:00
/// <summary>
/// 判断是否是管理员
/// </summary>
/// <param name="roleid"></param>
2021-12-17 15:03:33 +08:00
/// <returns></returns>
public bool IsRoleAdmin(long roleid)
{
var roleInfo = GetFirst(x => x.RoleId == roleid);
return roleInfo.RoleKey == GlobalConstant.AdminRole;
2021-12-17 15:03:33 +08:00
}
2021-08-23 16:57:25 +08:00
/// <summary>
/// 获取角色菜单id集合
/// </summary>
/// <param name="roleId"></param>
2021-08-23 16:57:25 +08:00
/// <returns></returns>
public List<long> SelectUserRoleMenus(long roleId)
{
2022-10-20 18:30:05 +08:00
var list = RoleMenuService.SelectRoleMenuByRoleId(roleId);
2021-08-23 16:57:25 +08:00
return list.Select(x => x.Menu_id).Distinct().ToList();
}
/// <summary>
/// 根据用户所有角色获取菜单
/// </summary>
/// <param name="roleIds"></param>
/// <returns></returns>
public List<long> SelectRoleMenuByRoleIds(long[] roleIds)
{
2022-10-20 18:30:05 +08:00
return RoleMenuService.SelectRoleMenuByRoleIds(roleIds)
.Select(x => x.Menu_id)
.Distinct().ToList();
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 获取用户角色列表
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<SysRole> SelectUserRoleListByUserId(long userId)
{
2022-10-20 18:30:05 +08:00
return Context.Queryable<SysUserRole, SysRole>((ur, r) => new JoinQueryInfos(
JoinType.Left, ur.RoleId == r.RoleId
)).Where((ur, r) => ur.UserId == userId)
.Select((ur, r) => r).ToList();
2021-08-23 16:57:25 +08:00
}
/// <summary>
/// 获取用户权限集合
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<long> SelectUserRoles(long userId)
{
var list = SelectUserRoleListByUserId(userId).Where(f => f.Status == "0");
return list.Select(x => x.RoleId).ToList();
}
/// <summary>
/// 获取用户权限字符串集合
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public List<string> SelectUserRoleKeys(long userId)
{
var list = SelectUserRoleListByUserId(userId);
return list.Select(x => x.RoleKey).ToList();
}
/// <summary>
/// 获取用户所有角色名
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
2021-08-23 16:57:25 +08:00
public List<string> SelectUserRoleNames(long userId)
{
var list = SelectUserRoleListByUserId(userId);
return list.Select(x => x.RoleName).ToList();
}
#endregion
/// <summary>
/// 修改保存角色信息
/// </summary>
/// <param name="sysRole">角色信息</param>
/// <returns></returns>
public int UpdateRole(SysRole sysRole)
{
2022-01-22 20:47:48 +08:00
var result = UseTran(() =>
{
//修改角色信息
2022-10-20 18:30:05 +08:00
UpdateSysRole(sysRole);
2022-01-22 20:47:48 +08:00
//删除角色与部门管理
DeptService.DeleteRoleDeptByRoleId(sysRole.RoleId);
//插入角色部门数据
DeptService.InsertRoleDepts(sysRole);
});
return result.IsSuccess ? 1 : 0;
2021-08-23 16:57:25 +08:00
}
2022-10-20 18:30:05 +08:00
/// <summary>
/// 修改用户角色
/// </summary>
/// <param name="sysRole"></param>
/// <returns></returns>
public int UpdateSysRole(SysRole sysRole)
{
var db = Context;
sysRole.Update_time = db.GetDate();
return db.Updateable<SysRole>()
.SetColumns(it => it.Update_time == sysRole.Update_time)
.SetColumns(it => it.DataScope == sysRole.DataScope)
.SetColumns(it => it.Remark == sysRole.Remark)
.SetColumns(it => it.Update_by == sysRole.Update_by)
//.SetColumns(it => it.MenuCheckStrictly == sysRole.MenuCheckStrictly)
.SetColumns(it => it.DeptCheckStrictly == sysRole.DeptCheckStrictly)
.SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleName), it => it.RoleName == sysRole.RoleName)
.SetColumnsIF(!string.IsNullOrEmpty(sysRole.RoleKey), it => it.RoleKey == sysRole.RoleKey)
.SetColumnsIF(sysRole.RoleSort >= 0, it => it.RoleSort == sysRole.RoleSort)
.Where(it => it.RoleId == sysRole.RoleId)
.ExecuteCommand();
}
2021-08-23 16:57:25 +08:00
}
}