From dec7ea19268d0e4624c3bbb7da0f3a1b52e69c72 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Thu, 24 Nov 2011 14:05:25 +0000 Subject: remove bukkit perms check from checkUserPermission as it's performed in checkFullUserPermission --- .../org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 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 b858c2a6c..feec3f17f 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -657,8 +657,6 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { if (result.resultType.equals(PermissionCheckResult.Type.EXCEPTION) || result.resultType.equals(PermissionCheckResult.Type.FOUND)) { return true; } - if ((Bukkit.getPlayer(user.getName()) != null) && (Bukkit.getPlayer(user.getName()).hasPermission(permission))) - return true; return false; } @@ -699,6 +697,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } } + // Check Bukkit perms to support plugins which add perms via code (Heroes). if ((Bukkit.getPlayer(user.getName()) != null) && (Bukkit.getPlayer(user.getName()).hasPermission(targetPermission))) { result.resultType = PermissionCheckResult.Type.FOUND; result.owner = user; -- cgit v1.2.3 From 73a7a6a1ddbddb294254b0d271a2928509db574f Mon Sep 17 00:00:00 2001 From: ElgarL Date: Thu, 24 Nov 2011 15:28:32 +0000 Subject: Optimize comparePermissionString --- .../permissions/AnjoPermissionsHandler.java | 28 +++++++++++++++------- 1 file changed, 20 insertions(+), 8 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 feec3f17f..94052bb25 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -9,6 +9,8 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.StringTokenizer; +import java.util.logging.Level; + import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.data.Group; import org.anjocaido.groupmanager.dataholder.WorldDataHolder; @@ -698,7 +700,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } // Check Bukkit perms to support plugins which add perms via code (Heroes). - if ((Bukkit.getPlayer(user.getName()) != null) && (Bukkit.getPlayer(user.getName()).hasPermission(targetPermission))) { + final Player player = Bukkit.getPlayer(user.getName()); + if ((player != null) && (player.hasPermission(targetPermission))) { result.resultType = PermissionCheckResult.Type.FOUND; result.owner = user; return result; @@ -967,7 +970,10 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { if (userAcessLevel == null || fullPermissionName == null) { return false; } - GroupManager.logger.finest("COMPARING " + userAcessLevel + " WITH " + fullPermissionName); + boolean logFinest = (GroupManager.logger.getLevel() == Level.FINEST); + + if (logFinest) + GroupManager.logger.finest("COMPARING " + userAcessLevel + " WITH " + fullPermissionName); if (userAcessLevel.startsWith("+")) { userAcessLevel = userAcessLevel.substring(1); @@ -986,25 +992,31 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { while (levelATokenizer.hasMoreTokens() && levelBTokenizer.hasMoreTokens()) { String levelA = levelATokenizer.nextToken(); String levelB = levelBTokenizer.nextToken(); - GroupManager.logger.finest("ROUND " + levelA + " AGAINST " + levelB); + if (logFinest) + GroupManager.logger.finest("ROUND " + levelA + " AGAINST " + levelB); if (levelA.contains("*")) { - GroupManager.logger.finest("WIN"); + if (logFinest) + GroupManager.logger.finest("WIN"); return true; } if (levelA.equalsIgnoreCase(levelB)) { if (!levelATokenizer.hasMoreTokens() && !levelBTokenizer.hasMoreTokens()) { - GroupManager.logger.finest("WIN"); + if (logFinest) + GroupManager.logger.finest("WIN"); return true; } - GroupManager.logger.finest("NEXT"); + if (logFinest) + GroupManager.logger.finest("NEXT"); continue; } else { - GroupManager.logger.finest("FAIL"); + if (logFinest) + GroupManager.logger.finest("FAIL"); return false; } } - GroupManager.logger.finest("FAIL"); + if (logFinest) + GroupManager.logger.finest("FAIL"); return false; } -- cgit v1.2.3 From 127681736de3e985c85acf4d7e1a61207f629033 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Thu, 24 Nov 2011 15:57:21 +0000 Subject: rewrite of comparePermissionString (snowleo) --- .../permissions/AnjoPermissionsHandler.java | 80 ++++++++-------------- 1 file changed, 28 insertions(+), 52 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 94052bb25..66561a1b8 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -966,59 +966,35 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @param fullPermissionName * @return true if found a matching token. false if not. */ - public boolean comparePermissionString(String userAcessLevel, String fullPermissionName) { - if (userAcessLevel == null || fullPermissionName == null) { - return false; - } - boolean logFinest = (GroupManager.logger.getLevel() == Level.FINEST); - - if (logFinest) - GroupManager.logger.finest("COMPARING " + userAcessLevel + " WITH " + fullPermissionName); - - if (userAcessLevel.startsWith("+")) { - userAcessLevel = userAcessLevel.substring(1); - } else if (userAcessLevel.startsWith("-")) { - userAcessLevel = userAcessLevel.substring(1); - } - - if (fullPermissionName.startsWith("+")) { - fullPermissionName = fullPermissionName.substring(1); - } else if (fullPermissionName.startsWith("-")) { - fullPermissionName = fullPermissionName.substring(1); - } + public boolean comparePermissionString(String userAccessLevel, String fullPermissionName) { + int userAccessLevelLength; + if (userAccessLevel == null || fullPermissionName == null + || (userAccessLevelLength = userAccessLevel.length()) == 0 || fullPermissionName.length() == 0) { + return false; + } + + int userAccessLevelOffset; + if (userAccessLevel.charAt(0) == '+' || userAccessLevel.charAt(0) == '-') { + userAccessLevelOffset = 1; + } else { + userAccessLevelOffset = 0; + } + if ("*".regionMatches(0, userAccessLevel, userAccessLevelOffset, userAccessLevelLength - userAccessLevelOffset)) { + return true; + } + int fullPermissionNameOffset; + if (fullPermissionName.charAt(0) == '+' || fullPermissionName.charAt(0) == '-') { + fullPermissionNameOffset = 1; + } else { + fullPermissionNameOffset = 0; + } + + if (userAccessLevel.charAt(userAccessLevel.length() - 1) == '*') { + userAccessLevelLength--; + } + return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, userAccessLevelLength - userAccessLevelOffset); + } - StringTokenizer levelATokenizer = new StringTokenizer(userAcessLevel, "."); - StringTokenizer levelBTokenizer = new StringTokenizer(fullPermissionName, "."); - while (levelATokenizer.hasMoreTokens() && levelBTokenizer.hasMoreTokens()) { - String levelA = levelATokenizer.nextToken(); - String levelB = levelBTokenizer.nextToken(); - if (logFinest) - GroupManager.logger.finest("ROUND " + levelA + " AGAINST " + levelB); - if (levelA.contains("*")) { - if (logFinest) - GroupManager.logger.finest("WIN"); - return true; - } - if (levelA.equalsIgnoreCase(levelB)) { - if (!levelATokenizer.hasMoreTokens() && !levelBTokenizer.hasMoreTokens()) { - if (logFinest) - GroupManager.logger.finest("WIN"); - return true; - } - if (logFinest) - GroupManager.logger.finest("NEXT"); - continue; - } else { - if (logFinest) - GroupManager.logger.finest("FAIL"); - return false; - } - - } - if (logFinest) - GroupManager.logger.finest("FAIL"); - return false; - } /** * Returns a list of all groups. -- cgit v1.2.3 From 70c235d4f074f24ce83240cd3033aa6ffcbfa61f Mon Sep 17 00:00:00 2001 From: ElgarL Date: Thu, 24 Nov 2011 16:00:46 +0000 Subject: remove unused imports. --- .../org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java | 2 -- 1 file changed, 2 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 66561a1b8..2b48eafa0 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -8,8 +8,6 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.StringTokenizer; -import java.util.logging.Level; import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.data.Group; -- cgit v1.2.3 From 5a9b573309fc36073660220c48fdfa172734e9c4 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Thu, 24 Nov 2011 16:05:41 +0000 Subject: More optimization (charAt(0)) --- .../groupmanager/permissions/AnjoPermissionsHandler.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 2b48eafa0..b20780a54 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -601,9 +601,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { for (String access : user.getPermissionList()) { if (comparePermissionString(access, permission)) { result.accessLevel = access; - if (access.startsWith("-")) { + if (access.charAt(0) == '-') { result.resultType = PermissionCheckResult.Type.NEGATION; - } else if (access.startsWith("+")) { + } else if (access.charAt(0) == '+') { result.resultType = PermissionCheckResult.Type.EXCEPTION; } else { result.resultType = PermissionCheckResult.Type.FOUND; @@ -631,9 +631,9 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { for (String access : group.getPermissionList()) { if (comparePermissionString(access, permission)) { result.accessLevel = access; - if (access.startsWith("-")) { + if (access.charAt(0) == '-') { result.resultType = PermissionCheckResult.Type.NEGATION; - } else if (access.startsWith("+")) { + } else if (access.charAt(0) == '+') { result.resultType = PermissionCheckResult.Type.EXCEPTION; } else { result.resultType = PermissionCheckResult.Type.FOUND; -- cgit v1.2.3 From cd8ef9361bd103f380ec6d5fa11063a3ba7556e7 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Thu, 24 Nov 2011 16:45:57 +0000 Subject: minimal optimizations --- .../anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java | 6 ++---- 1 file changed, 2 insertions(+), 4 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 b20780a54..9387f13ac 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -967,15 +967,13 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { public boolean comparePermissionString(String userAccessLevel, String fullPermissionName) { int userAccessLevelLength; if (userAccessLevel == null || fullPermissionName == null - || (userAccessLevelLength = userAccessLevel.length()) == 0 || fullPermissionName.length() == 0) { + || fullPermissionName.length() == 0 || (userAccessLevelLength = userAccessLevel.length()) == 0) { return false; } - int userAccessLevelOffset; + int userAccessLevelOffset = 0; if (userAccessLevel.charAt(0) == '+' || userAccessLevel.charAt(0) == '-') { userAccessLevelOffset = 1; - } else { - userAccessLevelOffset = 0; } if ("*".regionMatches(0, userAccessLevel, userAccessLevelOffset, userAccessLevelLength - userAccessLevelOffset)) { return true; -- cgit v1.2.3 From 24a60734885deb8128a9640d26e49e173b065a56 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Fri, 25 Nov 2011 15:49:35 +0000 Subject: Fix superperms to pass all tests http://dev.bukkit.org/server-mods/superpermstest/ --- .../permissions/AnjoPermissionsHandler.java | 74 ++++++++++++++++------ 1 file changed, 54 insertions(+), 20 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 9387f13ac..acfc65232 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -97,43 +97,59 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { @Override public List getAllPlayersPermissions(String userName) { - List playerPermArray = new ArrayList(ph.getUser(userName).getPermissionList()); - + List playerPermArray = new ArrayList(); + + for (String perm : ph.getUser(userName).getPermissionList()) { + if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) { + playerPermArray.add(perm); + + Map children = GroupManager.BukkitPermissions.getAllChildren(perm, playerPermArray); + + if (children != null) { + for (String child : children.keySet()) { + if (children.get(child)) + if ((!playerPermArray.contains(child)) && (!playerPermArray.contains("-" + child))) { + playerPermArray.add(child); + } + } + } + } + } for (String group : getGroups(userName)) { if (group.startsWith("g:") && GroupManager.getGlobalGroups().hasGroup(group)) { for (String perm : GroupManager.getGlobalGroups().getGroupsPermissions(group)) { if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) { playerPermArray.add(perm); - Map children = GroupManager.BukkitPermissions.getChildren(perm); + Map children = GroupManager.BukkitPermissions.getAllChildren(perm, playerPermArray); if (children != null) { for (String child : children.keySet()) { if (children.get(child)) - if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) + if ((!playerPermArray.contains(child)) && (!playerPermArray.contains("-" + child))) playerPermArray.add(child); } } } } - } else { for (String perm : ph.getGroup(group).getPermissionList()) { if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) { playerPermArray.add(perm); - - Map children = GroupManager.BukkitPermissions.getChildren(perm); + + Map children = GroupManager.BukkitPermissions.getAllChildren(perm, playerPermArray); if (children != null) { for (String child : children.keySet()) { if (children.get(child)) - if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) + if ((!playerPermArray.contains(child)) && (!playerPermArray.contains("-" + child))) { playerPermArray.add(child); + } } } - } } } } + //Collections.sort(playerPermArray, StringPermissionComparator.getInstance()); return playerPermArray; } @@ -670,8 +686,22 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @return PermissionCheckResult */ public PermissionCheckResult checkFullUserPermission(User user, String targetPermission) { + + return checkFullGMPermission(user, targetPermission, true); + } + + /** + * Check user and groups with inheritance and Bukkit if bukkit = true + * return a PermissionCheckResult. + * + * @param user + * @param targetPermission + * @param checkBukkit + * @return PermissionCheckResult + */ + public PermissionCheckResult checkFullGMPermission(User user, String targetPermission, Boolean checkBukkit) { PermissionCheckResult result = new PermissionCheckResult(); - result.askedPermission = targetPermission; + result.accessLevel = targetPermission; result.resultType = PermissionCheckResult.Type.NOTFOUND; if (user == null || targetPermission == null || targetPermission.isEmpty()) { @@ -697,12 +727,14 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } } - // Check Bukkit perms to support plugins which add perms via code (Heroes). - final Player player = Bukkit.getPlayer(user.getName()); - if ((player != null) && (player.hasPermission(targetPermission))) { - result.resultType = PermissionCheckResult.Type.FOUND; - result.owner = user; - return result; + if (checkBukkit == true) { + // Check Bukkit perms to support plugins which add perms via code (Heroes). + final Player player = Bukkit.getPlayer(user.getName()); + if ((player != null) && (player.hasPermission(targetPermission))) { + result.resultType = PermissionCheckResult.Type.FOUND; + result.owner = user; + return result; + } } // THEN IT RETURNS A NOT FOUND @@ -960,7 +992,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * Every '-' or '+' in the beginning is ignored. It will match only node * names. * - * @param userAcessLevel + * @param userAccessLevel * @param fullPermissionName * @return true if found a matching token. false if not. */ @@ -986,9 +1018,11 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } if (userAccessLevel.charAt(userAccessLevel.length() - 1) == '*') { - userAccessLevelLength--; - } - return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, userAccessLevelLength - userAccessLevelOffset); + return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, userAccessLevelLength - userAccessLevelOffset - 1); + } else { + return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, + Math.max(userAccessLevelLength - userAccessLevelOffset, fullPermissionName.length() - fullPermissionNameOffset)); + } } -- cgit v1.2.3 From b41c3709bae6b1ad6f2b6ce9e5494421168c8f5f Mon Sep 17 00:00:00 2001 From: ElgarL Date: Fri, 25 Nov 2011 16:01:46 +0000 Subject: Raised bukkit perms priority --- .../permissions/AnjoPermissionsHandler.java | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 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 acfc65232..91c73b5c2 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -669,7 +669,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @return true if permission was found. false if not, or was negated. */ public boolean checkUserPermission(User user, String permission) { - PermissionCheckResult result = checkFullUserPermission(user, permission); + PermissionCheckResult result = checkFullGMPermission(user, permission, true); if (result.resultType.equals(PermissionCheckResult.Type.EXCEPTION) || result.resultType.equals(PermissionCheckResult.Type.FOUND)) { return true; } @@ -708,6 +708,16 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { return result; } + if (checkBukkit == true) { + // Check Bukkit perms to support plugins which add perms via code (Heroes). + final Player player = Bukkit.getPlayer(user.getName()); + if ((player != null) && (player.hasPermission(targetPermission))) { + result.resultType = PermissionCheckResult.Type.FOUND; + result.owner = user; + return result; + } + } + PermissionCheckResult resultUser = checkUserOnlyPermission(user, targetPermission); if (!resultUser.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { return resultUser; @@ -727,16 +737,6 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } } - if (checkBukkit == true) { - // Check Bukkit perms to support plugins which add perms via code (Heroes). - final Player player = Bukkit.getPlayer(user.getName()); - if ((player != null) && (player.hasPermission(targetPermission))) { - result.resultType = PermissionCheckResult.Type.FOUND; - result.owner = user; - return result; - } - } - // THEN IT RETURNS A NOT FOUND return result; } -- cgit v1.2.3 From b25a8f059b4d383b21d789aefbd3e3273503c0ba Mon Sep 17 00:00:00 2001 From: ElgarL Date: Fri, 25 Nov 2011 19:33:32 +0000 Subject: Optimizations include changing the return of comparePermissionString. --- .../permissions/AnjoPermissionsHandler.java | 136 ++++++++++----------- 1 file changed, 66 insertions(+), 70 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 91c73b5c2..6e18bf3f8 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -17,6 +17,7 @@ import org.anjocaido.groupmanager.utils.PermissionCheckResult; import org.anjocaido.groupmanager.utils.PermissionCheckResult.Type; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; /** * Everything here maintains the model created by Nijikokun @@ -62,7 +63,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { */ @Override public boolean permission(Player player, String permission) { - return checkUserPermission(ph.getUser(player.getName()), permission); + return checkUserPermission(ph.getUser(player.getName()).updatePlayer(player), permission); } /** @@ -98,13 +99,13 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { public List getAllPlayersPermissions(String userName) { List playerPermArray = new ArrayList(); - + for (String perm : ph.getUser(userName).getPermissionList()) { if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) { playerPermArray.add(perm); - + Map children = GroupManager.BukkitPermissions.getAllChildren(perm, playerPermArray); - + if (children != null) { for (String child : children.keySet()) { if (children.get(child)) @@ -135,7 +136,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { for (String perm : ph.getGroup(group).getPermissionList()) { if ((!playerPermArray.contains(perm)) && (!playerPermArray.contains("-" + perm))) { playerPermArray.add(perm); - + Map children = GroupManager.BukkitPermissions.getAllChildren(perm, playerPermArray); if (children != null) { for (String child : children.keySet()) { @@ -149,7 +150,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } } } - //Collections.sort(playerPermArray, StringPermissionComparator.getInstance()); + // Collections.sort(playerPermArray, + // StringPermissionComparator.getInstance()); return playerPermArray; } @@ -243,7 +245,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Check if user can build. Checks inheritance and subgroups. * - * @param userName Player's name + * @param userName + * Player's name * @return true if the user can build */ public boolean canUserBuild(String userName) { @@ -283,8 +286,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Checks the specified group for the Info Build node. - * Does NOT check inheritance + * Checks the specified group for the Info Build node. Does NOT check + * inheritance * * @param groupName * @return true if can build @@ -615,15 +618,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { result.askedPermission = permission; result.owner = user; for (String access : user.getPermissionList()) { - if (comparePermissionString(access, permission)) { - result.accessLevel = access; - if (access.charAt(0) == '-') { - result.resultType = PermissionCheckResult.Type.NEGATION; - } else if (access.charAt(0) == '+') { - result.resultType = PermissionCheckResult.Type.EXCEPTION; - } else { - result.resultType = PermissionCheckResult.Type.FOUND; - } + result.resultType = comparePermissionString(access, permission); + if (result.resultType != PermissionCheckResult.Type.NOTFOUND) { return result; } } @@ -645,15 +641,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { result.owner = group; result.askedPermission = permission; for (String access : group.getPermissionList()) { - if (comparePermissionString(access, permission)) { - result.accessLevel = access; - if (access.charAt(0) == '-') { - result.resultType = PermissionCheckResult.Type.NEGATION; - } else if (access.charAt(0) == '+') { - result.resultType = PermissionCheckResult.Type.EXCEPTION; - } else { - result.resultType = PermissionCheckResult.Type.FOUND; - } + result.resultType = comparePermissionString(access, permission); + if (result.resultType != PermissionCheckResult.Type.NOTFOUND) { return result; } } @@ -670,7 +659,7 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { */ public boolean checkUserPermission(User user, String permission) { PermissionCheckResult result = checkFullGMPermission(user, permission, true); - if (result.resultType.equals(PermissionCheckResult.Type.EXCEPTION) || result.resultType.equals(PermissionCheckResult.Type.FOUND)) { + if (result.resultType == PermissionCheckResult.Type.EXCEPTION || result.resultType == PermissionCheckResult.Type.FOUND) { return true; } @@ -686,13 +675,13 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * @return PermissionCheckResult */ public PermissionCheckResult checkFullUserPermission(User user, String targetPermission) { - + return checkFullGMPermission(user, targetPermission, true); } - + /** - * Check user and groups with inheritance and Bukkit if bukkit = true - * return a PermissionCheckResult. + * Check user and groups with inheritance and Bukkit if bukkit = true return + * a PermissionCheckResult. * * @param user * @param targetPermission @@ -708,31 +697,33 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { return result; } - if (checkBukkit == true) { - // Check Bukkit perms to support plugins which add perms via code (Heroes). - final Player player = Bukkit.getPlayer(user.getName()); - if ((player != null) && (player.hasPermission(targetPermission))) { - result.resultType = PermissionCheckResult.Type.FOUND; + if (checkBukkit) { + // Check Bukkit perms to support plugins which add perms via code + // (Heroes). + final Player player = user.getBukkitPlayer(); + final Permission bukkitPerm = Bukkit.getPluginManager().getPermission(targetPermission); + if (player != null && bukkitPerm != null) { + result.resultType = player.hasPermission(bukkitPerm) ? PermissionCheckResult.Type.FOUND : PermissionCheckResult.Type.NEGATION; result.owner = user; return result; } } - + PermissionCheckResult resultUser = checkUserOnlyPermission(user, targetPermission); - if (!resultUser.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { + if (resultUser.resultType != PermissionCheckResult.Type.NOTFOUND) { return resultUser; } // IT ONLY CHECKS GROUPS PERMISSIONS IF RESULT FOR USER IS NOT FOUND PermissionCheckResult resultGroup = checkGroupPermissionWithInheritance(user.getGroup(), targetPermission); - if (!resultGroup.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { + if (resultGroup.resultType != PermissionCheckResult.Type.NOTFOUND) { return resultGroup; } // SUBGROUPS CHECK for (Group subGroup : user.subGroupListCopy()) { PermissionCheckResult resultSubGroup = checkGroupPermissionWithInheritance(subGroup, targetPermission); - if (!resultSubGroup.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { + if (resultSubGroup.resultType != PermissionCheckResult.Type.NOTFOUND) { return resultSubGroup; } } @@ -994,37 +985,42 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { * * @param userAccessLevel * @param fullPermissionName - * @return true if found a matching token. false if not. + * @return PermissionCheckResult.Type */ - public boolean comparePermissionString(String userAccessLevel, String fullPermissionName) { - int userAccessLevelLength; - if (userAccessLevel == null || fullPermissionName == null - || fullPermissionName.length() == 0 || (userAccessLevelLength = userAccessLevel.length()) == 0) { - return false; - } - - int userAccessLevelOffset = 0; - if (userAccessLevel.charAt(0) == '+' || userAccessLevel.charAt(0) == '-') { - userAccessLevelOffset = 1; - } - if ("*".regionMatches(0, userAccessLevel, userAccessLevelOffset, userAccessLevelLength - userAccessLevelOffset)) { - return true; - } - int fullPermissionNameOffset; - if (fullPermissionName.charAt(0) == '+' || fullPermissionName.charAt(0) == '-') { - fullPermissionNameOffset = 1; - } else { - fullPermissionNameOffset = 0; - } - - if (userAccessLevel.charAt(userAccessLevel.length() - 1) == '*') { - return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, userAccessLevelLength - userAccessLevelOffset - 1); - } else { - return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, - Math.max(userAccessLevelLength - userAccessLevelOffset, fullPermissionName.length() - fullPermissionNameOffset)); - } - } + public PermissionCheckResult.Type comparePermissionString(String userAccessLevel, String fullPermissionName) { + int userAccessLevelLength; + if (userAccessLevel == null || fullPermissionName == null || fullPermissionName.length() == 0 || (userAccessLevelLength = userAccessLevel.length()) == 0) { + return PermissionCheckResult.Type.NOTFOUND; + } + + PermissionCheckResult.Type result = PermissionCheckResult.Type.FOUND; + int userAccessLevelOffset = 0; + if (userAccessLevel.charAt(0) == '+') { + userAccessLevelOffset = 1; + result = PermissionCheckResult.Type.EXCEPTION; + } else if (userAccessLevel.charAt(0) == '-') { + userAccessLevelOffset = 1; + result = PermissionCheckResult.Type.NEGATION; + } + if ("*".regionMatches(0, userAccessLevel, userAccessLevelOffset, userAccessLevelLength - userAccessLevelOffset)) { + return result; + } + int fullPermissionNameOffset; + if (fullPermissionName.charAt(0) == '+' || fullPermissionName.charAt(0) == '-') { + fullPermissionNameOffset = 1; + } else { + fullPermissionNameOffset = 0; + } + if (userAccessLevel.charAt(userAccessLevel.length() - 1) == '*') { + return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, userAccessLevelLength - userAccessLevelOffset - 1) ? + result : PermissionCheckResult.Type.NOTFOUND; + } else { + return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, + Math.max(userAccessLevelLength - userAccessLevelOffset, fullPermissionName.length() - fullPermissionNameOffset)) ? + result : PermissionCheckResult.Type.NOTFOUND; + } + } /** * Returns a list of all groups. -- cgit v1.2.3