UserAuthService.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package com.simuwang.base.components;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.simuwang.base.common.support.dos.OnlyIdNameDO;
  5. import com.simuwang.base.mapper.system.SysRoleMapper;
  6. import com.simuwang.base.mapper.system.SysUserMapper;
  7. import com.simuwang.base.pojo.dos.sys.SysMenuDO;
  8. import com.simuwang.base.pojo.dos.sys.SysRoleDO;
  9. import com.simuwang.base.pojo.dos.sys.SysUserDO;
  10. import org.springframework.stereotype.Service;
  11. import java.util.List;
  12. import java.util.Objects;
  13. /**
  14. * @author wangzaijun
  15. * @date 2024/9/13 17:08
  16. * @description 用户权限服务
  17. */
  18. @Service
  19. public class UserAuthService {
  20. private final SysUserMapper userMapper;
  21. private final SysRoleMapper roleMapper;
  22. public UserAuthService(SysUserMapper userMapper, SysRoleMapper roleMapper) {
  23. this.userMapper = userMapper;
  24. this.roleMapper = roleMapper;
  25. }
  26. /**
  27. * 更新用户密码
  28. *
  29. * @param entity /
  30. */
  31. public void updatePwd(SysUserDO entity) {
  32. this.userMapper.updateById(entity);
  33. }
  34. /**
  35. * 根据用户账号获取用户信息
  36. *
  37. * @param username 用户账号
  38. * @return /
  39. */
  40. public SysUserDO getUserInfoByUsername(String username) {
  41. LambdaQueryWrapper<SysUserDO> wrapper = Wrappers.lambdaQuery(SysUserDO.class)
  42. .eq(SysUserDO::getUserName, username);
  43. return this.userMapper.selectOne(wrapper);
  44. }
  45. /**
  46. * 根据用户id获取角色权限列表
  47. *
  48. * @param userId 用户id
  49. * @return /
  50. */
  51. public List<SysRoleDO> listUserRoleByUserId(Integer userId) {
  52. boolean admin = this.isAdmin(userId);
  53. if (admin) {
  54. return this.userMapper.selectAllRole();
  55. }
  56. return this.userMapper.selectRoleByUserId(userId);
  57. }
  58. /**
  59. * 根据用户id获取菜单列表
  60. *
  61. * @param userId 用户id
  62. * @return /
  63. */
  64. public List<SysMenuDO> listUserMenuByUserId(Integer userId) {
  65. boolean admin = this.isAdmin(userId);
  66. if (admin) {
  67. return this.userMapper.selectAllMenu();
  68. }
  69. return this.userMapper.selectMenuByUserId(userId);
  70. }
  71. /**
  72. * 获取用户绑定的角色
  73. *
  74. * @param userId 用户id
  75. * @return /
  76. */
  77. public List<OnlyIdNameDO> userBindRoles(Integer userId) {
  78. boolean admin = this.isAdmin(userId);
  79. if (admin) {
  80. return this.userMapper.allRoles();
  81. }
  82. return this.userMapper.listBindRoles(userId);
  83. }
  84. /**
  85. * 角色分配的权限
  86. *
  87. * @param roleId 角色id
  88. * @return /
  89. */
  90. public List<OnlyIdNameDO> roleAssignPerms(Integer roleId) {
  91. boolean adminByRole = this.isAdminByRole(roleId);
  92. if (adminByRole) {
  93. return this.roleMapper.allPerms();
  94. }
  95. return this.roleMapper.listAssignPerms(roleId);
  96. }
  97. /**
  98. * 判断用户是否超级管理员
  99. * 1、如果用户id为0或者1则为超级管理员
  100. * 2、或者用户有system和admin角色
  101. *
  102. * @param userId 用户id
  103. * @return /
  104. */
  105. private boolean isAdmin(Integer userId) {
  106. if (Objects.equals(0, userId) || Objects.equals(1, userId)) {
  107. return true;
  108. }
  109. List<SysRoleDO> roles = this.userMapper.selectRoleByUserId(userId);
  110. SysRoleDO adminRole = roles.stream()
  111. .filter(e -> Objects.equals(1, e.getRoleId())
  112. || "system".equalsIgnoreCase(e.getRoleKey())
  113. || "admin".equalsIgnoreCase(e.getRoleKey()))
  114. .findFirst().orElse(null);
  115. return adminRole != null;
  116. }
  117. /**
  118. * 根据角色id判断角色是否管理员
  119. *
  120. * @param roleId 角色id
  121. * @return /
  122. */
  123. private boolean isAdminByRole(Integer roleId) {
  124. if (Objects.equals(1, roleId)) {
  125. return true;
  126. }
  127. SysRoleDO role = this.roleMapper.selectById(roleId);
  128. return role != null
  129. && ("system".equalsIgnoreCase(role.getRoleKey()) || "admin".equalsIgnoreCase(role.getRoleKey()));
  130. }
  131. }