SysRoleServiceImpl.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package com.kmall.common.service.impl;
  2. import com.kmall.common.dao.SysRoleDao;
  3. import com.kmall.common.dao.SysUserRoleDao;
  4. import com.kmall.common.entity.SysRoleEntity;
  5. import com.kmall.common.entity.SysUserRoleEntity;
  6. import com.kmall.common.service.SysRoleDeptService;
  7. import com.kmall.common.service.SysRoleMenuService;
  8. import com.kmall.common.service.SysRoleService;
  9. import com.kmall.common.service.SysUserService;
  10. import com.kmall.common.utils.Constant;
  11. import com.kmall.common.utils.RRException;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.transaction.annotation.Transactional;
  15. import java.util.Date;
  16. import java.util.HashMap;
  17. import java.util.List;
  18. import java.util.Map;
  19. /**
  20. * 角色
  21. *
  22. * @author Scott
  23. * @email
  24. * @date 2016年9月18日 上午9:45:12
  25. */
  26. @Service("sysRoleService")
  27. public class SysRoleServiceImpl implements SysRoleService {
  28. @Autowired
  29. private SysRoleDao sysRoleDao;
  30. @Autowired
  31. private SysUserRoleDao sysUserRoleDao;
  32. @Autowired
  33. private SysRoleMenuService sysRoleMenuService;
  34. @Autowired
  35. private SysUserService sysUserService;
  36. @Autowired
  37. private SysRoleDeptService sysRoleDeptService;
  38. @Override
  39. public SysRoleEntity queryObject(Long roleId) {
  40. return sysRoleDao.queryObject(roleId);
  41. }
  42. @Override
  43. public List<SysRoleEntity> queryList(Map<String, Object> map) {
  44. return sysRoleDao.queryList(map);
  45. }
  46. @Override
  47. public int queryTotal(Map<String, Object> map) {
  48. return sysRoleDao.queryTotal(map);
  49. }
  50. @Override
  51. @Transactional
  52. public void save(SysRoleEntity role) {
  53. if (role.getMenuIdList() == null || role.getMenuIdList().size() <= 0) {
  54. throw new RRException("功能权不能为空!");
  55. }
  56. role.setCreateTime(new Date());
  57. sysRoleDao.save(role);
  58. //检查权限是否越权
  59. checkPrems(role);
  60. //保存角色与菜单关系
  61. sysRoleMenuService.saveOrUpdate(role.getRoleId(), role.getMenuIdList());
  62. //保存角色与部门关系
  63. //sysRoleDeptService.saveOrUpdate(role.getRoleId(), role.getDeptIdList());
  64. }
  65. @Override
  66. @Transactional
  67. public void update(SysRoleEntity role) {
  68. if (role.getMenuIdList() == null || role.getMenuIdList().size() <= 0) {
  69. throw new RRException("功能权不能为空!");
  70. }
  71. sysRoleDao.update(role);
  72. //检查权限是否越权
  73. checkPrems(role);
  74. //更新角色与菜单关系
  75. sysRoleMenuService.saveOrUpdate(role.getRoleId(), role.getMenuIdList());
  76. //保存角色与部门关系
  77. //sysRoleDeptService.saveOrUpdate(role.getRoleId(), role.getDeptIdList());
  78. }
  79. @Override
  80. @Transactional
  81. public void deleteBatch(Long[] roleIds) {
  82. for (Long id : roleIds) {
  83. SysRoleEntity role = queryObject(id);
  84. Map<String, Object> map = new HashMap<>();
  85. map.put("roleId", id);
  86. List<SysUserRoleEntity> userEntityList = sysUserRoleDao.queryList(map);
  87. if (userEntityList != null && userEntityList.size() > 0) {
  88. throw new RRException("角色【" + role.getRoleName() + "】还有【" + userEntityList.size() + "】个管理员正在使用,删除失败!");
  89. }
  90. sysUserRoleDao.deleteByRoleId(id);
  91. sysRoleMenuService.delete(id);
  92. delete(id);
  93. }
  94. }
  95. @Override
  96. public void delete(Long roleId) {
  97. sysRoleDao.delete(roleId);
  98. }
  99. @Override
  100. public List<Long> queryRoleIdList(Long createUserId) {
  101. return sysRoleDao.queryRoleIdList(createUserId);
  102. }
  103. /**
  104. * 检查权限是否越权
  105. */
  106. private void checkPrems(SysRoleEntity role) {
  107. //如果不是超级管理员,则需要判断角色的权限是否超过自己的权限
  108. if (role.getCreateUserId() == Constant.SUPER_ADMIN) {
  109. return;
  110. }
  111. //查询用户所拥有的菜单列表
  112. List<Long> menuIdList = sysUserService.queryAllMenuId(role.getCreateUserId());
  113. //判断是否越权
  114. if (!menuIdList.containsAll(role.getMenuIdList())) {
  115. throw new RRException("新增角色的权限,已超出你的权限范围");
  116. }
  117. }
  118. }