LoginHelper.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package com.ruoyi.common.helper;
  2. import cn.dev33.satoken.context.SaHolder;
  3. import cn.dev33.satoken.stp.StpUtil;
  4. import cn.hutool.core.util.ArrayUtil;
  5. import cn.hutool.core.util.ObjectUtil;
  6. import com.ruoyi.common.constant.UserConstants;
  7. import com.ruoyi.common.core.domain.model.LoginUser;
  8. import com.ruoyi.common.enums.DeviceType;
  9. import com.ruoyi.common.enums.UserType;
  10. import com.ruoyi.common.exception.UtilException;
  11. import com.ruoyi.common.utils.StringUtils;
  12. import lombok.AccessLevel;
  13. import lombok.NoArgsConstructor;
  14. /**
  15. * 登录鉴权助手
  16. *
  17. * user_type 为 用户类型 同一个用户表 可以有多种用户类型 例如 pc,app
  18. * deivce 为 设备类型 同一个用户类型 可以有 多种设备类型 例如 web,ios
  19. * 可以组成 用户类型与设备类型多对多的 权限灵活控制
  20. *
  21. * 多用户体系 针对 多种用户类型 但权限控制不一致
  22. * 可以组成 多用户类型表与多设备类型 分别控制权限
  23. *
  24. * @author Lion Li
  25. */
  26. @NoArgsConstructor(access = AccessLevel.PRIVATE)
  27. public class LoginHelper {
  28. public static final String JOIN_CODE = ":";
  29. public static final String LOGIN_USER_KEY = "loginUser";
  30. /**
  31. * 登录系统
  32. *
  33. * @param loginUser 登录用户信息
  34. */
  35. public static void login(LoginUser loginUser) {
  36. SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
  37. StpUtil.login(loginUser.getLoginId());
  38. setLoginUser(loginUser);
  39. }
  40. /**
  41. * 登录系统 基于 设备类型
  42. * 针对相同用户体系不同设备
  43. *
  44. * @param loginUser 登录用户信息
  45. */
  46. public static void loginByDevice(LoginUser loginUser, DeviceType deviceType) {
  47. SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
  48. StpUtil.login(loginUser.getLoginId(), deviceType.getDevice());
  49. setLoginUser(loginUser);
  50. }
  51. /**
  52. * 设置用户数据(多级缓存)
  53. */
  54. public static void setLoginUser(LoginUser loginUser) {
  55. StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
  56. }
  57. /**
  58. * 获取用户(多级缓存)
  59. */
  60. public static LoginUser getLoginUser() {
  61. LoginUser loginUser = (LoginUser) SaHolder.getStorage().get(LOGIN_USER_KEY);
  62. if (loginUser != null) {
  63. return loginUser;
  64. }
  65. loginUser = (LoginUser) StpUtil.getTokenSession().get(LOGIN_USER_KEY);
  66. SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
  67. return loginUser;
  68. }
  69. /**
  70. * 获取用户id
  71. */
  72. public static Long getUserId() {
  73. LoginUser loginUser = getLoginUser();
  74. if (ObjectUtil.isNull(loginUser)) {
  75. String loginId = StpUtil.getLoginIdAsString();
  76. String[] strs = StringUtils.split(loginId, JOIN_CODE);
  77. if (!ArrayUtil.containsAny(strs, UserType.values())) {
  78. throw new UtilException("登录用户: LoginId异常 => " + loginId);
  79. }
  80. // 用户id在总是在最后
  81. return Long.parseLong(strs[strs.length - 1]);
  82. }
  83. return loginUser.getUserId();
  84. }
  85. /**
  86. * 获取部门ID
  87. */
  88. public static Long getDeptId() {
  89. return getLoginUser().getDeptId();
  90. }
  91. /**
  92. * 获取用户账户
  93. */
  94. public static String getUsername() {
  95. return getLoginUser().getUsername();
  96. }
  97. /**
  98. * 获取用户类型
  99. */
  100. public static UserType getUserType() {
  101. String loginId = StpUtil.getLoginIdAsString();
  102. return UserType.getUserType(loginId);
  103. }
  104. /**
  105. * 是否为管理员
  106. *
  107. * @param userId 用户ID
  108. * @return 结果
  109. */
  110. public static boolean isAdmin(Long userId) {
  111. return UserConstants.ADMIN_ID.equals(userId);
  112. }
  113. public static boolean isAdmin() {
  114. return isAdmin(getUserId());
  115. }
  116. }