PermissionService.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package com.ruoyi.system.service;
  2. import com.ruoyi.common.core.domain.entity.SysRole;
  3. import com.ruoyi.common.core.domain.entity.SysUser;
  4. import com.ruoyi.common.core.domain.model.LoginUser;
  5. import com.ruoyi.common.core.service.UserService;
  6. import com.ruoyi.common.utils.SecurityUtils;
  7. import com.ruoyi.common.utils.StringUtils;
  8. import com.ruoyi.common.utils.spring.SpringUtils;
  9. import org.springframework.stereotype.Service;
  10. import org.springframework.util.CollectionUtils;
  11. import java.util.Set;
  12. /**
  13. * RuoYi首创 自定义权限实现,ss取自SpringSecurity首字母
  14. *
  15. * @author ruoyi
  16. */
  17. @Service("ss")
  18. public class PermissionService {
  19. /**
  20. * 所有权限标识
  21. */
  22. private static final String ALL_PERMISSION = "*:*:*";
  23. /**
  24. * 管理员角色权限标识
  25. */
  26. private static final String SUPER_ADMIN = "admin";
  27. private static final String ROLE_DELIMETER = ",";
  28. private static final String PERMISSION_DELIMETER = ",";
  29. /**
  30. * 验证用户是否具备某权限
  31. *
  32. * @param permission 权限字符串
  33. * @return 用户是否具备某权限
  34. */
  35. public boolean hasPermi(String permission) {
  36. if (StringUtils.isEmpty(permission)) {
  37. return false;
  38. }
  39. LoginUser loginUser = SecurityUtils.getLoginUser();
  40. if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) {
  41. return false;
  42. }
  43. return hasPermissions(loginUser.getPermissions(), permission);
  44. }
  45. /**
  46. * 验证用户是否不具备某权限,与 hasPermi逻辑相反
  47. *
  48. * @param permission 权限字符串
  49. * @return 用户是否不具备某权限
  50. */
  51. public boolean lacksPermi(String permission) {
  52. return hasPermi(permission) != true;
  53. }
  54. /**
  55. * 验证用户是否具有以下任意一个权限
  56. *
  57. * @param permissions 以 PERMISSION_NAMES_DELIMETER 为分隔符的权限列表
  58. * @return 用户是否具有以下任意一个权限
  59. */
  60. public boolean hasAnyPermi(String permissions) {
  61. if (StringUtils.isEmpty(permissions)) {
  62. return false;
  63. }
  64. LoginUser loginUser = SecurityUtils.getLoginUser();
  65. if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) {
  66. return false;
  67. }
  68. Set<String> authorities = loginUser.getPermissions();
  69. for (String permission : permissions.split(PERMISSION_DELIMETER)) {
  70. if (permission != null && hasPermissions(authorities, permission)) {
  71. return true;
  72. }
  73. }
  74. return false;
  75. }
  76. /**
  77. * 判断用户是否拥有某个角色
  78. *
  79. * @param role 角色字符串
  80. * @return 用户是否具备某角色
  81. */
  82. public boolean hasRole(String role) {
  83. if (StringUtils.isEmpty(role)) {
  84. return false;
  85. }
  86. LoginUser loginUser = SecurityUtils.getLoginUser();
  87. if (StringUtils.isNull(loginUser)) {
  88. return false;
  89. }
  90. SysUser sysUser = SpringUtils.getBean(UserService.class).selectUserById(loginUser.getUserId());
  91. if (CollectionUtils.isEmpty(sysUser.getRoles())) {
  92. return false;
  93. }
  94. for (SysRole sysRole : sysUser.getRoles()) {
  95. String roleKey = sysRole.getRoleKey();
  96. if (SUPER_ADMIN.equals(roleKey) || roleKey.equals(StringUtils.trim(role))) {
  97. return true;
  98. }
  99. }
  100. return false;
  101. }
  102. /**
  103. * 验证用户是否不具备某角色,与 isRole逻辑相反。
  104. *
  105. * @param role 角色名称
  106. * @return 用户是否不具备某角色
  107. */
  108. public boolean lacksRole(String role) {
  109. return hasRole(role) != true;
  110. }
  111. /**
  112. * 验证用户是否具有以下任意一个角色
  113. *
  114. * @param roles 以 ROLE_NAMES_DELIMETER 为分隔符的角色列表
  115. * @return 用户是否具有以下任意一个角色
  116. */
  117. public boolean hasAnyRoles(String roles) {
  118. if (StringUtils.isEmpty(roles)) {
  119. return false;
  120. }
  121. LoginUser loginUser = SecurityUtils.getLoginUser();
  122. if (StringUtils.isNull(loginUser)) {
  123. return false;
  124. }
  125. SysUser sysUser = SpringUtils.getBean(UserService.class).selectUserById(loginUser.getUserId());
  126. if (CollectionUtils.isEmpty(sysUser.getRoles())) {
  127. return false;
  128. }
  129. for (String role : roles.split(ROLE_DELIMETER)) {
  130. if (hasRole(role)) {
  131. return true;
  132. }
  133. }
  134. return false;
  135. }
  136. /**
  137. * 判断是否包含权限
  138. *
  139. * @param permissions 权限列表
  140. * @param permission 权限字符串
  141. * @return 用户是否具备某权限
  142. */
  143. private boolean hasPermissions(Set<String> permissions, String permission) {
  144. return permissions.contains(ALL_PERMISSION) || permissions.contains(StringUtils.trim(permission));
  145. }
  146. }