|
@@ -38,8 +38,6 @@ import java.util.List;
|
|
|
@Service("sr")
|
|
|
public class SecurityUtil {
|
|
|
|
|
|
- @Value("${REDIS_LOGIN_TOKEN_PREFIX}")
|
|
|
- private String REDIS_LOGIN_TOKEN_PREFIX;
|
|
|
@Value("${REDIS_LOGIN_PERMISSION_PREFIX}")
|
|
|
private String REDIS_LOGIN_PERMISSION_PREFIX;
|
|
|
|
|
@@ -47,12 +45,12 @@ public class SecurityUtil {
|
|
|
private RedisUtil redisUtil;
|
|
|
|
|
|
private static final String SECRET_KEY = "452948404D635166546A576E5A7134743777217A25432A462D4A614E64526755";
|
|
|
+
|
|
|
private static SecretKey getSignInKey() {
|
|
|
byte[] bytes = Base64.getDecoder().decode(SECRET_KEY.getBytes(StandardCharsets.UTF_8));
|
|
|
return new SecretKeySpec(bytes, "HmacSHA256");
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 获得当前登录用户ID
|
|
|
*/
|
|
@@ -86,34 +84,48 @@ public class SecurityUtil {
|
|
|
securityUserInfo.setTarget(target);
|
|
|
return securityUserInfo;
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 判断是否超级管理员
|
|
|
+ */
|
|
|
+ public static Boolean isSuper() {
|
|
|
+ SecurityUserInfo userInfo = getUserInfo();
|
|
|
+ return userInfo.getIs_super() == 1;
|
|
|
+ }
|
|
|
|
|
|
+// public static Boolean hasPermission(String permission) {
|
|
|
+// SecurityUserInfo userInfo = getUserInfo();
|
|
|
+// List<String> permission_ids = userInfo.getPermission_ids();
|
|
|
+// return permission_ids.contains(permission);
|
|
|
+// }
|
|
|
|
|
|
/**
|
|
|
* 判断是否具备权限 (单个)
|
|
|
* - SecurityUtil.hasPermission("3.2.1")
|
|
|
*/
|
|
|
- public static Boolean hasPermission(String permission) {
|
|
|
+ private List<String> getPermissionIds() {
|
|
|
SecurityUserInfo userInfo = getUserInfo();
|
|
|
+ String uuid = userInfo.getLast_login_uuid();
|
|
|
+ String redis_key = REDIS_LOGIN_PERMISSION_PREFIX + uuid;
|
|
|
+ String permission_ids_str = redisUtil.getCacheObject(redis_key);
|
|
|
+ List<String> permission_ids = Arrays.asList(permission_ids_str.split(","));
|
|
|
+ return permission_ids;
|
|
|
+ }
|
|
|
|
|
|
-// String uuid = securityUserInfo.getLast_login_uuid();
|
|
|
-// String redis_key = REDIS_LOGIN_PERMISSION_PREFIX + uuid;
|
|
|
-// String permission_ids = redisUtil.getCacheObject(redis_key);
|
|
|
-// List<String> permission_ids_list = Arrays.asList(permission_ids.split(","));
|
|
|
-//
|
|
|
-// return permission_ids_list.contains(permission);
|
|
|
-
|
|
|
- List<String> permission_ids = userInfo.getPermission_ids();
|
|
|
+ public Boolean hasPermission(String permission) {
|
|
|
+ if (isSuper()) return true;
|
|
|
+ List<String> permission_ids = getPermissionIds();
|
|
|
return permission_ids.contains(permission);
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 判断是否具备用户权限 (多个) (默认 AND)
|
|
|
* - SecurityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"))
|
|
|
* - SecurityUtil.hasPermissions(Arrays.asList("3.2.1", "3.2.2"), MatchType.OR)
|
|
|
* - 注意:权限储存在Token中,更新权限需要重新登录
|
|
|
*/
|
|
|
- public static Boolean hasPermissions(List<String> permis, MatchType matchType) {
|
|
|
- SecurityUserInfo userInfo = getUserInfo();
|
|
|
- List<String> permission_ids = userInfo.getPermission_ids();
|
|
|
+ public Boolean hasPermissions(List<String> permis, MatchType matchType) {
|
|
|
+ if (isSuper()) return true;
|
|
|
+ List<String> permission_ids = getPermissionIds();
|
|
|
if (matchType.equals(MatchType.AND)) {
|
|
|
return permis.stream().allMatch(permission_ids::contains);
|
|
|
} else if (matchType.equals(MatchType.OR)) {
|
|
@@ -121,24 +133,8 @@ public class SecurityUtil {
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
- public static Boolean hasPermissions(List<String> permissions) {
|
|
|
- return hasPermissions(permissions, MatchType.AND);
|
|
|
+ public Boolean hasPermissions(List<String> permis) {
|
|
|
+ return hasPermissions(permis, MatchType.AND);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- /**
|
|
|
- * 判断是否超级管理员
|
|
|
- */
|
|
|
- public static Boolean isSuper() {
|
|
|
- SecurityUserInfo userInfo = getUserInfo();
|
|
|
- return userInfo.getIs_super() == 1;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-// public static Object getPrincipal() {
|
|
|
-// Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
|
|
-// Object principal = authentication.getPrincipal();
|
|
|
-// return principal;
|
|
|
-// }
|
|
|
-
|
|
|
}
|