PermissionService.java 4.5 KB

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