From 819c8f3aa997ada92fd97d3d22c7e35cdc1f36d4 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Fri, 28 Oct 2011 18:43:29 +0100 Subject: Fixed GM to recognize Superperm child nodes. If you add a node like Towny.admin GM will now correctly report on all child nodes. --- EssentialsGroupManager/src/Changelog.txt | 4 ++- .../org/anjocaido/groupmanager/GroupManager.java | 1 + .../permissions/AnjoPermissionsHandler.java | 25 +++++++++++++++++-- .../permissions/BukkitPermissions.java | 29 +++++++++++++++++++++- 4 files changed, 55 insertions(+), 4 deletions(-) (limited to 'EssentialsGroupManager') diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index 4df937c9d..9a2eff5f2 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -51,4 +51,6 @@ v 1.4: - Added data.save.hours setting to config. This allow control over how long backups are retained. v 1.5: - Fixed opOverrides and bukkit_perms_override to read the correct entries. - - Better commenting in config.yml \ No newline at end of file + - Better commenting in config.yml + - Fixed GM to recognize Superperm child nodes. + If you add a node like Towny.admin GM will now correctly report on all child nodes. \ No newline at end of file diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java index 5ef4fc537..a450b4bee 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -763,6 +763,7 @@ public class GroupManager extends JavaPlugin { permissionResult = permissionHandler.checkFullUserPermission(auxUser, args[1]); if (permissionResult.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { sender.sendMessage(ChatColor.RED + "The player doesn't have access to that permission"); + sender.sendMessage(ChatColor.YELLOW + "SuperPerms reports Node: " + targetPlayer.hasPermission(args[1])); return false; } //PARECE OK diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java index cb9fdf628..203ac95a9 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -7,6 +7,7 @@ package org.anjocaido.groupmanager.permissions; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.StringTokenizer; import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.data.Group; @@ -14,6 +15,7 @@ import org.anjocaido.groupmanager.dataholder.WorldDataHolder; import org.anjocaido.groupmanager.data.User; import org.anjocaido.groupmanager.utils.PermissionCheckResult; import org.anjocaido.groupmanager.utils.PermissionCheckResult.Type; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; /** @@ -93,8 +95,19 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { for (String group : getGroups(userName)) { for (String perm : ph.getGroup(group).getPermissionList()) { - if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-"+perm))) + if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-"+perm))) { playerPermArray.add(perm); + + Map children = GroupManager.BukkitPermissions.getChildren(perm); + if (children != null) { + for (String child : children.keySet()) { + if (children.get(child)) + if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-"+perm))) + playerPermArray.add(child); + } + } + + } } } @@ -566,6 +579,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { || result.resultType.equals(PermissionCheckResult.Type.FOUND)) { return true; } + if (Bukkit.getPlayer(user.getName()).hasPermission(permission)) + return true; + return false; } @@ -587,7 +603,6 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { PermissionCheckResult resultUser = checkUserOnlyPermission(user, targetPermission); if (!resultUser.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { return resultUser; - } //IT ONLY CHECKS GROUPS PERMISSIONS IF RESULT FOR USER IS NOT FOUND @@ -603,6 +618,12 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { return resultSubGroup; } } + + if (Bukkit.getPlayer(user.getName()).hasPermission(targetPermission)) { + result.resultType = PermissionCheckResult.Type.FOUND; + result.owner = user; + return result; + } //THEN IT RETURNS A NOT FOUND return result; diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java index 6a5968c22..9bc38f933 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -150,8 +150,19 @@ public class BukkitPermissions { value = true; } - if (value == true) + if (value == true){ + // Set the root permission attachment.setPermission(permission, value); + // fetch and set all children of this permission node + Map children = permission.getChildren(); + if (children != null) { + for (String child : children.keySet()) { + if (children.get(child)) + attachment.setPermission(child, true); + } + } + + } } // Add any missing permissions for this player (non bukkit plugins) @@ -171,6 +182,22 @@ public class BukkitPermissions { player.recalculatePermissions(); } + /** + * Returns a map of the child permissions as defined by the supplying plugin + * null is empty + * + * @param node + * @return + */ + public Map getChildren(String node) { + for (Permission permission : registeredPermissions) { + if (permission.getName() == node) { + return permission.getChildren(); + } + } + return null; + } + public List listPerms(Player player) { List perms = new ArrayList(); -- cgit v1.2.3