using Infrastructure; using Infrastructure.Attribute; using Infrastructure.Model; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using ARW.Model; using ARW.Model.System; using ARW.Repository.System; using ARW.Service.System.IService; namespace ARW.Service { /// /// 角色 /// [AppService(ServiceType = typeof(ISysRoleService), ServiceLifetime = LifeTime.Transient)] public class SysRoleService : BaseService, ISysRoleService { private SysRoleRepository SysRoleRepository; private ISysUserRoleService SysUserRoleService; private ISysDeptService DeptService; public SysRoleService( SysRoleRepository sysRoleRepository, ISysUserRoleService sysUserRoleService, ISysDeptService deptService) { SysRoleRepository = sysRoleRepository; SysUserRoleService = sysUserRoleService; DeptService = deptService; } /// /// 根据条件分页查询角色数据 /// /// 角色信息 /// 分页信息 /// 角色数据集合信息 public PagedInfo SelectRoleList(SysRole role, PagerInfo pager) { return SysRoleRepository.SelectRoleList(role, pager); } /// /// 查询所有角色 /// /// /// public List SelectRoleAll() { return SysRoleRepository.SelectRoleList(); } /// /// 根据用户查询 /// /// /// public List SelectRolePermissionByUserId(long userId) { return SysRoleRepository.SelectRolePermissionByUserId(userId); } /// /// 通过角色ID查询角色 /// /// 角色ID /// 角色对象信息 public SysRole SelectRoleById(long roleId) { return SysRoleRepository.SelectRoleById(roleId); } /// /// 批量删除角色信息 /// /// 需要删除的角色ID /// 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}已分配,不能删除"); } } return SysRoleRepository.DeleteRoleByRoleIds(roleIds); } /// /// 更改角色权限状态 /// /// /// public int UpdateRoleStatus(SysRole roleDto) { return SysRoleRepository.UpdateRoleStatus(roleDto); } /// /// 校验角色权限是否唯一 /// /// 角色信息 /// public string CheckRoleKeyUnique(SysRole sysRole) { long roleId = 0 == sysRole.RoleId ? -1L : sysRole.RoleId; SysRole info = SysRoleRepository.CheckRoleKeyUnique(sysRole.RoleKey); if (info != null && info.RoleId != roleId) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; } /// /// 校验角色是否允许操作 /// /// public void CheckRoleAllowed(SysRole role) { if (IsRoleAdmin(role.RoleId)) { throw new CustomException("不允许操作超级管理员角色"); } } /// /// 新增保存角色信息 /// /// 角色信息 /// public long InsertRole(SysRole sysRole) { return SysRoleRepository.InsertRole(sysRole); //return InsertRoleMenu(sysRole); } /// /// 通过角色ID删除角色和菜单关联 /// /// 角色ID /// public int DeleteRoleMenuByRoleId(long roleId) { return SysRoleRepository.DeleteRoleMenuByRoleId(roleId); } /// /// 修改数据权限信息 /// /// /// public bool AuthDataScope(SysRole sysRoleDto) { return UseTran2(() => { //删除角色菜单 DeleteRoleMenuByRoleId(sysRoleDto.RoleId); InsertRoleMenu(sysRoleDto); }); } #region Service /// /// 批量新增角色菜单信息 /// /// /// public int InsertRoleMenu(SysRole sysRoleDto) { int rows = 1; // 新增用户与角色管理 List sysRoleMenus = new List(); foreach (var item in sysRoleDto.MenuIds) { SysRoleMenu rm = new SysRoleMenu { Menu_id = item, Role_id = sysRoleDto.RoleId, Create_by = sysRoleDto.Create_by, Create_time = DateTime.Now }; sysRoleMenus.Add(rm); } //添加角色菜单 if (sysRoleMenus.Count > 0) { rows = SysRoleRepository.AddRoleMenu(sysRoleMenus); } return rows; } /// /// 判断是否是管理员 /// /// /// public bool IsAdmin(long userid) { List roles = SelectUserRoleKeys(userid); return ((IList)roles).Contains("admin"); } /// /// 判断是否是管理员 /// /// /// public bool IsRoleAdmin(long roleid) { var roleInfo = GetFirst(x => x.RoleId == roleid); return roleInfo.RoleKey == "admin"; } /// /// 获取角色菜单id集合 /// /// /// public List SelectUserRoleMenus(long roleId) { var list = SysRoleRepository.SelectRoleMenuByRoleId(roleId); return list.Select(x => x.Menu_id).Distinct().ToList(); } /// /// 根据用户所有角色获取菜单 /// /// /// public List SelectRoleMenuByRoleIds(long[] roleIds) { return SysRoleRepository.SelectRoleMenuByRoleIds(roleIds) .Select(x => x.Menu_id) .Distinct().ToList(); } /// /// 获取用户角色列表 /// /// /// public List SelectUserRoleListByUserId(long userId) { return SysRoleRepository.SelectUserRoleListByUserId(userId); } /// /// 获取用户权限集合 /// /// /// public List SelectUserRoles(long userId) { var list = SelectUserRoleListByUserId(userId).Where(f => f.Status == "0"); return list.Select(x => x.RoleId).ToList(); } /// /// 获取用户权限字符串集合 /// /// /// public List SelectUserRoleKeys(long userId) { var list = SelectUserRoleListByUserId(userId); return list.Select(x => x.RoleKey).ToList(); } /// /// 获取用户所有角色名 /// /// /// public List SelectUserRoleNames(long userId) { var list = SelectUserRoleListByUserId(userId); return list.Select(x => x.RoleName).ToList(); } #endregion /// /// 修改保存角色信息 /// /// 角色信息 /// public int UpdateRole(SysRole sysRole) { var result = UseTran(() => { //修改角色信息 SysRoleRepository.UpdateSysRole(sysRole); //删除角色与部门管理 DeptService.DeleteRoleDeptByRoleId(sysRole.RoleId); //插入角色部门数据 DeptService.InsertRoleDepts(sysRole); }); return result.IsSuccess ? 1 : 0; } } }