diff --git a/src/main/java/net/pietru/cookie_utils/permissions/Permissions.java b/src/main/java/net/pietru/cookie_utils/permissions/Permissions.java index 869cf52..3f1925c 100644 --- a/src/main/java/net/pietru/cookie_utils/permissions/Permissions.java +++ b/src/main/java/net/pietru/cookie_utils/permissions/Permissions.java @@ -108,11 +108,34 @@ public class Permissions { } public static boolean has_perm(String playerId,String perm){ + if (perm.isEmpty()) + return has_user_special_perm(playerId); GroupPerms group = default_group; if (player_group.containsKey(playerId)) if (groupPermsMap.containsKey(player_group.get(playerId))) group=groupPermsMap.get(player_group.get(playerId)); - return has_user_special_perm(playerId) || group.has_perm(perm) || group.has_perm("*"); + String[] perm_parts = perm.split("\\."); + boolean has_valid_perm = group.has_perm("*"); + if (!has_valid_perm){ + for (int i = 0; i < perm_parts.length; i++) { + StringBuilder perm_test = new StringBuilder(); + for (int j = 0; j < i + 1; j++) { + if (j < i) + perm_test.append(perm_parts[j]).append("."); + else { + if (perm_parts.length == i + 1) + perm_test.append(perm_parts[j]); + else + perm_test.append("*"); + } + } + if (group.has_perm(perm_test.toString())) { + has_valid_perm = true; + break; + } + } + } + return has_user_special_perm(playerId) || has_valid_perm; } public static GroupPerms get_group(String playerId){