From 381886245b7070e989acb12442a8aa6f6f1d5009 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Thu, 5 Apr 2012 12:54:26 +0100 Subject: Update to 2.0 Fix GM reporting of permission inheritance to retain the correct order. Lower inheritance groups can no longer negate a higher groups permissions. --- .../permissions/AnjoPermissionsHandler.java | 30 ++++++++++------------ 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java') diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java index 6b6ae58ea..08240441d 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -144,7 +144,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { // Perm doesn't already exists and there is no negation for it // or It's a negated perm where a normal perm doesn't exists (don't allow inheritance to negate higher perms) if ((!negated && !playerPermArray.contains(perm) && !playerPermArray.contains("-" + perm)) - || (negated && !playerPermArray.contains(perm.substring(1)))) + || (negated && !playerPermArray.contains(perm.substring(1)) && !playerPermArray.contains("-" + perm))) playerPermArray.add(perm); } } @@ -164,20 +164,17 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { if (perms.contains("*")) { permArray.addAll(GroupManager.BukkitPermissions.getAllRegisteredPermissions(includeChildren)); allPerms = true; + perms.remove("*"); } for (String perm : perms) { - - if (!perm.equalsIgnoreCase("*")) { - + /** * all permission sets are passed here pre-sorted, alphabetically. * This means negated nodes will be processed before all permissions * other than *. */ - boolean negated = false; - if (perm.startsWith("-")) - negated = true; + boolean negated = perm.startsWith("-"); if (!permArray.contains(perm)) { permArray.add(perm); @@ -195,15 +192,16 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { Map children = GroupManager.BukkitPermissions.getAllChildren((negated ? perm.substring(1) : perm), new HashSet()); if (children != null) { - if (negated || (negated && allPerms)) { + if (negated) + if (allPerms) { - // Remove children of negated nodes - for (String child : children.keySet()) - if (children.get(child)) - if (permArray.contains(child)) - permArray.remove(child); + // Remove children of negated nodes + for (String child : children.keySet()) + if (children.get(child)) + if (permArray.contains(child)) + permArray.remove(child); - } else if (!negated){ + } else { // Add child nodes for (String child : children.keySet()) @@ -214,7 +212,6 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } } } - } } return permArray; @@ -959,7 +956,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { for (String sonName : now.getInherits()) { Group son = ph.getGroup(sonName); if (son != null && !alreadyVisited.contains(son)) { - stack.push(son); + // Add rather than push to retain inheritance order. + stack.add(son); alreadyVisited.add(son); } } -- cgit v1.2.3