diff options
Diffstat (limited to 'EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java')
-rw-r--r-- | EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java | 785 |
1 files changed, 482 insertions, 303 deletions
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java index efad11df4..01f646f00 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -18,89 +18,94 @@ import org.anjocaido.groupmanager.data.User; import org.anjocaido.groupmanager.utils.PermissionCheckResult; import org.bukkit.entity.Player; + /** * Everything here maintains the model created by Nijikokun - * - * But implemented to use GroupManager system. Which provides instant changes, - * without file access. - * + * + * But implemented to use GroupManager system. Which provides instant changes, without file access. + * * It holds permissions only for one single world. - * + * * @author gabrielcouto, ElgarL */ -public class AnjoPermissionsHandler extends PermissionsReaderInterface { - +public class AnjoPermissionsHandler extends PermissionsReaderInterface +{ WorldDataHolder ph = null; /** * It needs a WorldDataHolder to work with. - * + * * @param holder */ - public AnjoPermissionsHandler(WorldDataHolder holder) { + public AnjoPermissionsHandler(WorldDataHolder holder) + { ph = holder; } /** * A short name method, for permission method. - * + * * @param player * @param permission * @return true if the player has the permission */ @Override - public boolean has(Player player, String permission) { + public boolean has(Player player, String permission) + { return permission(player, permission); } /** * Checks if a player can use that permission node. - * + * * @param player * @param permission * @return true if the player has the permission */ @Override - public boolean permission(Player player, String permission) { + public boolean permission(Player player, String permission) + { return checkUserPermission(ph.getUser(player.getName()).updatePlayer(player), permission); } /** * Checks if a player can use that permission node. - * + * * @param playerName * @param permission * @return true if the player has the permission */ - public boolean permission(String playerName, String permission) { + public boolean permission(String playerName, String permission) + { return checkUserPermission(ph.getUser(playerName), permission); } /** * Returns the name of the group of that player name. - * + * * @param userName * @return String of players group name. */ @Override - public String getGroup(String userName) { + public String getGroup(String userName) + { return ph.getUser(userName).getGroup().getName(); } /** - * Returns All permissions (including inheritance and sub groups) for the - * player, including child nodes from Bukkit. - * + * Returns All permissions (including inheritance and sub groups) for the player, including child nodes from Bukkit. + * * @param userName * @return List<String> of all players permissions. */ @Override - public List<String> getAllPlayersPermissions(String userName) { + public List<String> getAllPlayersPermissions(String userName) + { List<String> perms = new ArrayList<String>(); @@ -110,14 +115,15 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Returns All permissions (including inheritance and sub groups) for the - * player. With or without Bukkit child nodes. - * + * Returns All permissions (including inheritance and sub groups) for the player. With or without Bukkit child + * nodes. + * * @param userName * @return Set<String> of all players permissions. */ @Override - public Set<String> getAllPlayersPermissions(String userName, Boolean includeChildren) { + public Set<String> getAllPlayersPermissions(String userName, Boolean includeChildren) + { Set<String> playerPermArray = new HashSet<String>(); @@ -127,29 +133,37 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { ArrayList<String> alreadyProcessed = new ArrayList<String>(); // fetch all group permissions - for (String group : getGroups(userName)) { + for (String group : getGroups(userName)) + { // Don't process a group more than once. - if (!alreadyProcessed.contains(group)) { + if (!alreadyProcessed.contains(group)) + { alreadyProcessed.add(group); Set<String> groupPermArray = new HashSet<String>(); - if (group.startsWith("g:") && GroupManager.getGlobalGroups().hasGroup(group)) { + if (group.startsWith("g:") && GroupManager.getGlobalGroups().hasGroup(group)) + { // GlobalGroups groupPermArray = populatePerms(GroupManager.getGlobalGroups().getGroupsPermissions(group), includeChildren); - } else { + } + else + { // World Groups groupPermArray = populatePerms(ph.getGroup(group).getPermissionList(), includeChildren); } // Add all group permissions, unless negated by earlier permissions. - for (String perm : groupPermArray) { + for (String perm : groupPermArray) + { boolean negated = (perm.startsWith("-")); // 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)) && !playerPermArray.contains("-" + perm))) + { playerPermArray.add(perm); + } } } @@ -159,7 +173,8 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { return playerPermArray; } - private Set<String> populatePerms(List<String> permsList, boolean includeChildren) { + private Set<String> populatePerms(List<String> permsList, boolean includeChildren) + { // Create a new array so it's modifiable. List<String> perms = new ArrayList<String>(permsList); @@ -167,55 +182,76 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { Boolean allPerms = false; // Allow * node to populate ALL permissions to Bukkit. - if (perms.contains("*")) { + if (perms.contains("*")) + { permArray.addAll(GroupManager.BukkitPermissions.getAllRegisteredPermissions(includeChildren)); allPerms = true; perms.remove("*"); } - for (String perm : perms) { + for (String perm : perms) + { /** - * all permission sets are passed here pre-sorted, alphabetically. - * This means negated nodes will be processed before all permissions - * other than *. + * all permission sets are passed here pre-sorted, alphabetically. This means negated nodes will be + * processed before all permissions other than *. */ boolean negated = perm.startsWith("-"); - if (!permArray.contains(perm)) { + if (!permArray.contains(perm)) + { permArray.add(perm); if ((negated) && (permArray.contains(perm.substring(1)))) + { permArray.remove(perm.substring(1)); + } /** - * Process child nodes if required, - * or this is a negated node AND we used * to include all - * permissions, + * Process child nodes if required, or this is a negated node AND we used * to include all permissions, * in which case we need to remove all children of that node. */ - if ((includeChildren) || (negated && allPerms)) { + if ((includeChildren) || (negated && allPerms)) + { Map<String, Boolean> children = GroupManager.BukkitPermissions.getAllChildren((negated ? perm.substring(1) : perm), new HashSet<String>()); - if (children != null) { + if (children != null) + { if (negated) - if (allPerms) { + { + if (allPerms) + { // Remove children of negated nodes for (String child : children.keySet()) + { if (children.get(child)) + { if (permArray.contains(child)) + { permArray.remove(child); + } + } + } - } else { + } + else + { // Add child nodes for (String child : children.keySet()) + { if (children.get(child)) + { if ((!permArray.contains(child)) && (!permArray.contains("-" + child))) + { permArray.add(child); + } + } + } } + } } } } @@ -226,27 +262,29 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Verify if player is in such group. It will check it's groups inheritance. - * + * * So if you have a group Admin > Moderator - * - * And verify the player 'MyAdmin', which is Admin, it will return true for - * both Admin or Moderator groups. - * - * If you have a player 'MyModerator', which is Moderator, it will give - * false if you pass Admin in group parameter. - * + * + * And verify the player 'MyAdmin', which is Admin, it will return true for both Admin or Moderator groups. + * + * If you have a player 'MyModerator', which is Moderator, it will give false if you pass Admin in group parameter. + * * @param name * @param group * @return true if in group (with inheritance) */ @Override - public boolean inGroup(String name, String group) { + public boolean inGroup(String name, String group) + { - if (hasGroupInInheritance(ph.getUser(name).getGroup(), group)) { + if (hasGroupInInheritance(ph.getUser(name).getGroup(), group)) + { return true; } - for (Group subGroup : ph.getUser(name).subGroupListCopy()) { - if (hasGroupInInheritance(subGroup, group)) { + for (Group subGroup : ph.getUser(name).subGroupListCopy()) + { + if (hasGroupInInheritance(subGroup, group)) + { return true; } } @@ -254,20 +292,20 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Gets the appropriate prefix for the user. This method is a utility method - * for chat plugins to get the user's prefix without having to look at every - * one of the user's ancestors. Returns an empty string if user has no - * parent groups. - * - * @param user - * Player's name + * Gets the appropriate prefix for the user. This method is a utility method for chat plugins to get the user's + * prefix without having to look at every one of the user's ancestors. Returns an empty string if user has no parent + * groups. + * + * @param user Player's name * @return Player's prefix */ @Override - public String getUserPrefix(String user) { + public String getUserPrefix(String user) + { String prefix = ph.getUser(user).getVariables().getVarString("prefix"); - if (prefix.length() != 0) { + if (prefix.length() != 0) + { return prefix; } @@ -275,20 +313,20 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Gets the appropriate prefix for the user. This method is a utility method - * for chat plugins to get the user's prefix without having to look at every - * one of the user's ancestors. Returns an empty string if user has no - * parent groups. - * - * @param user - * Player's name + * Gets the appropriate prefix for the user. This method is a utility method for chat plugins to get the user's + * prefix without having to look at every one of the user's ancestors. Returns an empty string if user has no parent + * groups. + * + * @param user Player's name * @return Player's prefix */ @Override - public String getUserSuffix(String user) { + public String getUserSuffix(String user) + { String suffix = ph.getUser(user).getVariables().getVarString("suffix"); - if (suffix.length() != 0) { + if (suffix.length() != 0) + { return suffix; } @@ -297,15 +335,14 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Gets name of the primary group of the user. Returns the name of the - * default group if user has no parent groups, or "Default" if there is no - * default group for that world. - * - * @param user - * Player's name + * Gets name of the primary group of the user. Returns the name of the default group if user has no parent groups, + * or "Default" if there is no default group for that world. + * + * @param user Player's name * @return Name of player's primary group */ - public String getPrimaryGroup(String user) { + public String getPrimaryGroup(String user) + { return getGroup(user); @@ -313,12 +350,12 @@ 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) { + public boolean canUserBuild(String userName) + { return getPermissionBoolean(userName, "build"); @@ -326,15 +363,17 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Returns the String prefix for the given group - * + * * @param groupName * @return empty string if found none. */ @Override - public String getGroupPrefix(String groupName) { + public String getGroupPrefix(String groupName) + { Group g = ph.getGroup(groupName); - if (g == null) { + if (g == null) + { return ""; } return g.getVariables().getVarString("prefix"); @@ -342,120 +381,131 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Return the suffix for the given group name - * + * * @param groupName * @return empty string if not found. */ @Override - public String getGroupSuffix(String groupName) { + public String getGroupSuffix(String groupName) + { Group g = ph.getGroup(groupName); - if (g == null) { + if (g == null) + { return ""; } return g.getVariables().getVarString("suffix"); } /** - * 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 */ @Override - public boolean canGroupBuild(String groupName) { + public boolean canGroupBuild(String groupName) + { Group g = ph.getGroup(groupName); - if (g == null) { + if (g == null) + { return false; } return g.getVariables().getVarBoolean("build"); } /** - * It returns a string variable value, set in the INFO node of the group. It - * will harvest inheritance for value. - * + * It returns a string variable value, set in the INFO node of the group. It will harvest inheritance for value. + * * @param groupName * @param variable * @return null if no group with that variable is found. */ @Override - public String getGroupPermissionString(String groupName, String variable) { + public String getGroupPermissionString(String groupName, String variable) + { Group start = ph.getGroup(groupName); - if (start == null) { + if (start == null) + { return null; } Group result = nextGroupWithVariable(start, variable); - if (result == null) { + if (result == null) + { return null; } return result.getVariables().getVarString(variable); } /** - * It returns a Integer variable value It will harvest inheritance for - * value. - * + * It returns a Integer variable value It will harvest inheritance for value. + * * @param groupName * @param variable * @return -1 if none found or not parseable. */ @Override - public int getGroupPermissionInteger(String groupName, String variable) { + public int getGroupPermissionInteger(String groupName, String variable) + { Group start = ph.getGroup(groupName); - if (start == null) { + if (start == null) + { return -1; } Group result = nextGroupWithVariable(start, variable); - if (result == null) { + if (result == null) + { return -1; } return result.getVariables().getVarInteger(variable); } /** - * Returns a boolean for given variable in INFO node. It will harvest - * inheritance for value. - * + * Returns a boolean for given variable in INFO node. It will harvest inheritance for value. + * * @param group * @param variable * @return false if not found/not parseable. */ @Override - public boolean getGroupPermissionBoolean(String group, String variable) { + public boolean getGroupPermissionBoolean(String group, String variable) + { Group start = ph.getGroup(group); - if (start == null) { + if (start == null) + { return false; } Group result = nextGroupWithVariable(start, variable); - if (result == null) { + if (result == null) + { return false; } return result.getVariables().getVarBoolean(variable); } /** - * Returns a double value for the given variable name in INFO node. It will - * harvest inheritance for value. - * + * Returns a double value for the given variable name in INFO node. It will harvest inheritance for value. + * * @param group * @param variable * @return -1 if not found / not parseable. */ @Override - public double getGroupPermissionDouble(String group, String variable) { + public double getGroupPermissionDouble(String group, String variable) + { Group start = ph.getGroup(group); - if (start == null) { + if (start == null) + { return -1; } Group result = nextGroupWithVariable(start, variable); - if (result == null) { + if (result == null) + { return -1; } return result.getVariables().getVarDouble(variable); @@ -463,16 +513,18 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Returns the variable value of the user, in INFO node. - * + * * @param user * @param variable * @return empty string if not found */ @Override - public String getUserPermissionString(String user, String variable) { + public String getUserPermissionString(String user, String variable) + { User auser = ph.getUser(user); - if (auser == null) { + if (auser == null) + { return ""; } return auser.getVariables().getVarString(variable); @@ -480,16 +532,18 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Returns the variable value of the user, in INFO node. - * + * * @param user * @param variable * @return -1 if not found */ @Override - public int getUserPermissionInteger(String user, String variable) { + public int getUserPermissionInteger(String user, String variable) + { User auser = ph.getUser(user); - if (auser == null) { + if (auser == null) + { return -1; } return auser.getVariables().getVarInteger(variable); @@ -497,16 +551,18 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Returns the variable value of the user, in INFO node. - * + * * @param user * @param variable * @return boolean value */ @Override - public boolean getUserPermissionBoolean(String user, String variable) { + public boolean getUserPermissionBoolean(String user, String variable) + { User auser = ph.getUser(user); - if (auser == null) { + if (auser == null) + { return false; } return auser.getVariables().getVarBoolean(variable); @@ -514,176 +570,222 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Returns the variable value of the user, in INFO node. - * + * * @param user * @param variable * @return -1 if not found */ @Override - public double getUserPermissionDouble(String user, String variable) { + public double getUserPermissionDouble(String user, String variable) + { User auser = ph.getUser(user); - if (auser == null) { + if (auser == null) + { return -1; } return auser.getVariables().getVarDouble(variable); } /** - * Returns the variable value of the user, in INFO node. If not found, it - * will search for his Group variables. It will harvest the inheritance and - * subgroups. - * + * Returns the variable value of the user, in INFO node. If not found, it will search for his Group variables. It + * will harvest the inheritance and subgroups. + * * @param user * @param variable * @return empty string if not found */ @Override - public String getPermissionString(String user, String variable) { + public String getPermissionString(String user, String variable) + { User auser = ph.getUser(user); - if (auser == null) { + if (auser == null) + { return ""; } - if (auser.getVariables().hasVar(variable)) { + if (auser.getVariables().hasVar(variable)) + { return auser.getVariables().getVarString(variable); } Group start = auser.getGroup(); - if (start == null) { + if (start == null) + { return ""; } Group result = nextGroupWithVariable(start, variable); - if (result == null) { + if (result == null) + { // Check sub groups if (!auser.isSubGroupsEmpty()) - for (Group subGroup : auser.subGroupListCopy()) { + { + for (Group subGroup : auser.subGroupListCopy()) + { result = nextGroupWithVariable(subGroup, variable); // Found value? if (result != null) + { continue; + } } + } if (result == null) + { return ""; + } } return result.getVariables().getVarString(variable); // return getUserPermissionString(user, variable); } /** - * Returns the variable value of the user, in INFO node. If not found, it - * will search for his Group variables. It will harvest the inheritance and - * subgroups. - * + * Returns the variable value of the user, in INFO node. If not found, it will search for his Group variables. It + * will harvest the inheritance and subgroups. + * * @param user * @param variable * @return -1 if not found */ @Override - public int getPermissionInteger(String user, String variable) { + public int getPermissionInteger(String user, String variable) + { User auser = ph.getUser(user); - if (auser == null) { + if (auser == null) + { return -1; } - if (auser.getVariables().hasVar(variable)) { + if (auser.getVariables().hasVar(variable)) + { return auser.getVariables().getVarInteger(variable); } Group start = auser.getGroup(); - if (start == null) { + if (start == null) + { return -1; } Group result = nextGroupWithVariable(start, variable); - if (result == null) { + if (result == null) + { // Check sub groups if (!auser.isSubGroupsEmpty()) - for (Group subGroup : auser.subGroupListCopy()) { + { + for (Group subGroup : auser.subGroupListCopy()) + { result = nextGroupWithVariable(subGroup, variable); // Found value? if (result != null) + { continue; + } } + } if (result == null) + { return -1; + } } return result.getVariables().getVarInteger(variable); // return getUserPermissionInteger(string, string1); } /** - * Returns the variable value of the user, in INFO node. If not found, it - * will search for his Group variables. It will harvest the inheritance and - * subgroups. - * + * Returns the variable value of the user, in INFO node. If not found, it will search for his Group variables. It + * will harvest the inheritance and subgroups. + * * @param user * @param variable * @return false if not found or not parseable to true. */ @Override - public boolean getPermissionBoolean(String user, String variable) { + public boolean getPermissionBoolean(String user, String variable) + { User auser = ph.getUser(user); - if (auser == null) { + if (auser == null) + { return false; } - if (auser.getVariables().hasVar(variable)) { + if (auser.getVariables().hasVar(variable)) + { return auser.getVariables().getVarBoolean(variable); } Group start = auser.getGroup(); - if (start == null) { + if (start == null) + { return false; } Group result = nextGroupWithVariable(start, variable); - if (result == null) { + if (result == null) + { // Check sub groups if (!auser.isSubGroupsEmpty()) - for (Group subGroup : auser.subGroupListCopy()) { + { + for (Group subGroup : auser.subGroupListCopy()) + { result = nextGroupWithVariable(subGroup, variable); // Found value? if (result != null) + { continue; + } } + } if (result == null) + { return false; + } } return result.getVariables().getVarBoolean(variable); // return getUserPermissionBoolean(user, string1); } /** - * Returns the variable value of the user, in INFO node. If not found, it - * will search for his Group variables. It will harvest the inheritance and - * subgroups. - * + * Returns the variable value of the user, in INFO node. If not found, it will search for his Group variables. It + * will harvest the inheritance and subgroups. + * * @param user * @param variable * @return -1 if not found. */ @Override - public double getPermissionDouble(String user, String variable) { + public double getPermissionDouble(String user, String variable) + { User auser = ph.getUser(user); - if (auser == null) { + if (auser == null) + { return -1.0D; } - if (auser.getVariables().hasVar(variable)) { + if (auser.getVariables().hasVar(variable)) + { return auser.getVariables().getVarDouble(variable); } Group start = auser.getGroup(); - if (start == null) { + if (start == null) + { return -1.0D; } Group result = nextGroupWithVariable(start, variable); - if (result == null) { + if (result == null) + { // Check sub groups if (!auser.isSubGroupsEmpty()) - for (Group subGroup : auser.subGroupListCopy()) { + { + for (Group subGroup : auser.subGroupListCopy()) + { result = nextGroupWithVariable(subGroup, variable); // Found value? if (result != null) + { continue; + } } + } if (result == null) + { return -1.0D; + } } return result.getVariables().getVarDouble(variable); // return getUserPermissionDouble(string, string1); @@ -691,20 +793,23 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Does not include User's group permission - * + * * @param user * @param permission * @return PermissionCheckResult */ - public PermissionCheckResult checkUserOnlyPermission(User user, String permission) { + public PermissionCheckResult checkUserOnlyPermission(User user, String permission) + { user.sortPermissions(); PermissionCheckResult result = new PermissionCheckResult(); result.askedPermission = permission; result.owner = user; - for (String access : user.getPermissionList()) { + for (String access : user.getPermissionList()) + { result.resultType = comparePermissionString(access, permission); - if (result.resultType != PermissionCheckResult.Type.NOTFOUND) { + if (result.resultType != PermissionCheckResult.Type.NOTFOUND) + { return result; } } @@ -713,22 +818,24 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Returns the node responsible for that permission. Does not include User's - * group permission. - * + * Returns the node responsible for that permission. Does not include User's group permission. + * * @param group * @param permission * @return the node if permission is found. if not found, return null */ - public PermissionCheckResult checkGroupOnlyPermission(Group group, String permission) { + public PermissionCheckResult checkGroupOnlyPermission(Group group, String permission) + { group.sortPermissions(); PermissionCheckResult result = new PermissionCheckResult(); result.owner = group; result.askedPermission = permission; - for (String access : group.getPermissionList()) { + for (String access : group.getPermissionList()) + { result.resultType = comparePermissionString(access, permission); - if (result.resultType != PermissionCheckResult.Type.NOTFOUND) { + if (result.resultType != PermissionCheckResult.Type.NOTFOUND) + { return result; } } @@ -738,15 +845,17 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * Check permissions, including it's group and inheritance. - * + * * @param user * @param permission * @return true if permission was found. false if not, or was negated. */ - public boolean checkUserPermission(User user, String permission) { + public boolean checkUserPermission(User user, String permission) + { PermissionCheckResult result = checkFullGMPermission(user, permission, true); - if (result.resultType == PermissionCheckResult.Type.EXCEPTION || result.resultType == PermissionCheckResult.Type.FOUND) { + if (result.resultType == PermissionCheckResult.Type.EXCEPTION || result.resultType == PermissionCheckResult.Type.FOUND) + { return true; } @@ -754,43 +863,46 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Do what checkUserPermission did before. But now returning a - * PermissionCheckResult. - * + * Do what checkUserPermission did before. But now returning a PermissionCheckResult. + * * @param user * @param targetPermission * @return PermissionCheckResult */ - public PermissionCheckResult checkFullUserPermission(User user, String targetPermission) { + 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 * @param checkBukkit * @return PermissionCheckResult */ - public PermissionCheckResult checkFullGMPermission(User user, String targetPermission, Boolean checkBukkit) { + public PermissionCheckResult checkFullGMPermission(User user, String targetPermission, Boolean checkBukkit) + { PermissionCheckResult result = new PermissionCheckResult(); result.accessLevel = targetPermission; result.resultType = PermissionCheckResult.Type.NOTFOUND; - if (user == null || targetPermission == null || targetPermission.isEmpty()) { + if (user == null || targetPermission == null || targetPermission.isEmpty()) + { return result; } - if (checkBukkit) { + 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) && player.hasPermission(targetPermission)) { + if ((player != null) && player.hasPermission(targetPermission)) + { result.resultType = PermissionCheckResult.Type.FOUND; result.owner = user; return result; @@ -798,22 +910,26 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } PermissionCheckResult resultUser = checkUserOnlyPermission(user, targetPermission); - if (resultUser.resultType != PermissionCheckResult.Type.NOTFOUND) { + if (resultUser.resultType != PermissionCheckResult.Type.NOTFOUND) + { resultUser.accessLevel = targetPermission; return resultUser; } // IT ONLY CHECKS GROUPS PERMISSIONS IF RESULT FOR USER IS NOT FOUND PermissionCheckResult resultGroup = checkGroupPermissionWithInheritance(user.getGroup(), targetPermission); - if (resultGroup.resultType != PermissionCheckResult.Type.NOTFOUND) { + if (resultGroup.resultType != PermissionCheckResult.Type.NOTFOUND) + { resultGroup.accessLevel = targetPermission; return resultGroup; } // SUBGROUPS CHECK - for (Group subGroup : user.subGroupListCopy()) { + for (Group subGroup : user.subGroupListCopy()) + { PermissionCheckResult resultSubGroup = checkGroupPermissionWithInheritance(subGroup, targetPermission); - if (resultSubGroup.resultType != PermissionCheckResult.Type.NOTFOUND) { + if (resultSubGroup.resultType != PermissionCheckResult.Type.NOTFOUND) + { resultSubGroup.accessLevel = targetPermission; return resultSubGroup; } @@ -824,32 +940,37 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Returns the next group, including inheritance, which contains that - * variable name. - * + * Returns the next group, including inheritance, which contains that variable name. + * * It does Breadth-first search - * + * * @param start the starting group to look for * @param targetVariable the variable name * @return The group if found. Null if not. */ - public Group nextGroupWithVariable(Group start, String targetVariable) { + public Group nextGroupWithVariable(Group start, String targetVariable) + { - if (start == null || targetVariable == null) { + if (start == null || targetVariable == null) + { return null; } LinkedList<Group> stack = new LinkedList<Group>(); ArrayList<Group> alreadyVisited = new ArrayList<Group>(); stack.push(start); alreadyVisited.add(start); - while (!stack.isEmpty()) { + while (!stack.isEmpty()) + { Group now = stack.pop(); - if (now.getVariables().hasVar(targetVariable)) { + if (now.getVariables().hasVar(targetVariable)) + { return now; } - for (String sonName : now.getInherits()) { + for (String sonName : now.getInherits()) + { Group son = ph.getGroup(sonName); - if (son != null && !alreadyVisited.contains(son)) { + if (son != null && !alreadyVisited.contains(son)) + { stack.push(son); alreadyVisited.add(son); } @@ -858,33 +979,38 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { return null; } - /** * Check if given group inherits another group. - * + * * It does Breadth-first search - * + * * @param start The group to start the search. * @param askedGroup Name of the group you're looking for * @return true if it inherits the group. */ - public boolean hasGroupInInheritance(Group start, String askedGroup) { + public boolean hasGroupInInheritance(Group start, String askedGroup) + { - if (start == null || askedGroup == null) { + if (start == null || askedGroup == null) + { return false; } LinkedList<Group> stack = new LinkedList<Group>(); ArrayList<Group> alreadyVisited = new ArrayList<Group>(); stack.push(start); alreadyVisited.add(start); - while (!stack.isEmpty()) { + while (!stack.isEmpty()) + { Group now = stack.pop(); - if (now.getName().equalsIgnoreCase(askedGroup)) { + if (now.getName().equalsIgnoreCase(askedGroup)) + { return true; } - for (String sonName : now.getInherits()) { + for (String sonName : now.getInherits()) + { Group son = ph.getGroup(sonName); - if (son != null && !alreadyVisited.contains(son)) { + if (son != null && !alreadyVisited.contains(son)) + { stack.push(son); alreadyVisited.add(son); } @@ -894,37 +1020,41 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Returns the result of permission check. Including inheritance. If found - * anything, the PermissionCheckResult that retuns will include the Group - * name, and the result type. Result types will be EXCEPTION, NEGATION, - * FOUND. - * + * Returns the result of permission check. Including inheritance. If found anything, the PermissionCheckResult that + * retuns will include the Group name, and the result type. Result types will be EXCEPTION, NEGATION, FOUND. + * * If returned type NOTFOUND, the owner will be null, and ownerType too. - * + * * It does Breadth-first search - * + * * @param start * @param targetPermission * @return PermissionCheckResult */ - public PermissionCheckResult checkGroupPermissionWithInheritance(Group start, String targetPermission) { + public PermissionCheckResult checkGroupPermissionWithInheritance(Group start, String targetPermission) + { - if (start == null || targetPermission == null) { + if (start == null || targetPermission == null) + { return null; } LinkedList<Group> stack = new LinkedList<Group>(); List<Group> alreadyVisited = new ArrayList<Group>(); stack.push(start); alreadyVisited.add(start); - while (!stack.isEmpty()) { + while (!stack.isEmpty()) + { Group now = stack.pop(); PermissionCheckResult resultNow = checkGroupOnlyPermission(now, targetPermission); - if (!resultNow.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) { + if (!resultNow.resultType.equals(PermissionCheckResult.Type.NOTFOUND)) + { return resultNow; } - for (String sonName : now.getInherits()) { + for (String sonName : now.getInherits()) + { Group son = ph.getGroup(sonName); - if (son != null && !alreadyVisited.contains(son)) { + if (son != null && !alreadyVisited.contains(son)) + { // Add rather than push to retain inheritance order. stack.add(son); alreadyVisited.add(son); @@ -938,28 +1068,32 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Return whole list of names of groups in a inheritance chain. Including a - * starting group. - * + * Return whole list of names of groups in a inheritance chain. Including a starting group. + * * It does Breadth-first search. So closer groups will appear first in list. - * + * * @param start * @return the group that passed on test. null if no group passed. */ - public ArrayList<String> listAllGroupsInherited(Group start) { + public ArrayList<String> listAllGroupsInherited(Group start) + { - if (start == null) { + if (start == null) + { return null; } LinkedList<Group> stack = new LinkedList<Group>(); ArrayList<String> alreadyVisited = new ArrayList<String>(); stack.push(start); alreadyVisited.add(start.getName()); - while (!stack.isEmpty()) { + while (!stack.isEmpty()) + { Group now = stack.pop(); - for (String sonName : now.getInherits()) { + for (String sonName : now.getInherits()) + { Group son = ph.getGroup(sonName); - if (son != null && !alreadyVisited.contains(son.getName())) { + if (son != null && !alreadyVisited.contains(son.getName())) + { stack.push(son); alreadyVisited.add(son.getName()); } @@ -969,69 +1103,79 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } /** - * Compare a user permission like 'myplugin.*' against a full plugin - * permission name, like 'myplugin.dosomething'. As the example above, will - * return true. - * - * Please sort permissions before sending them here. So negative tokens get - * priority. - * - * You must test if it start with negative outside this method. It will only - * tell if the nodes are matching or not. - * - * Every '-' or '+' in the beginning is ignored. It will match only node - * names. - * + * Compare a user permission like 'myplugin.*' against a full plugin permission name, like 'myplugin.dosomething'. + * As the example above, will return true. + * + * Please sort permissions before sending them here. So negative tokens get priority. + * + * You must test if it start with negative outside this method. It will only tell if the nodes are matching or not. + * + * Every '-' or '+' in the beginning is ignored. It will match only node names. + * * @param userAccessLevel * @param fullPermissionName * @return PermissionCheckResult.Type */ - public PermissionCheckResult.Type comparePermissionString(String userAccessLevel, String fullPermissionName) { + public PermissionCheckResult.Type comparePermissionString(String userAccessLevel, String fullPermissionName) + { int userAccessLevelLength; - if (userAccessLevel == null || fullPermissionName == null || fullPermissionName.length() == 0 || (userAccessLevelLength = userAccessLevel.length()) == 0) { + 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) == '+') { + if (userAccessLevel.charAt(0) == '+') + { userAccessLevelOffset = 1; result = PermissionCheckResult.Type.EXCEPTION; - } else if (userAccessLevel.charAt(0) == '-') { + } + else if (userAccessLevel.charAt(0) == '-') + { userAccessLevelOffset = 1; result = PermissionCheckResult.Type.NEGATION; } - if ("*".regionMatches(0, userAccessLevel, userAccessLevelOffset, userAccessLevelLength - userAccessLevelOffset)) { + if ("*".regionMatches(0, userAccessLevel, userAccessLevelOffset, userAccessLevelLength - userAccessLevelOffset)) + { return result; } int fullPermissionNameOffset; - if (fullPermissionName.charAt(0) == '+' || fullPermissionName.charAt(0) == '-') { + if (fullPermissionName.charAt(0) == '+' || fullPermissionName.charAt(0) == '-') + { fullPermissionNameOffset = 1; - } else { + } + else + { fullPermissionNameOffset = 0; } - if (userAccessLevel.charAt(userAccessLevel.length() - 1) == '*') { + if (userAccessLevel.charAt(userAccessLevel.length() - 1) == '*') + { return userAccessLevel.regionMatches(true, userAccessLevelOffset, fullPermissionName, fullPermissionNameOffset, userAccessLevelLength - userAccessLevelOffset - 1) ? result : PermissionCheckResult.Type.NOTFOUND; - } else { + } + 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. - * + * * Including subgroups. - * + * * @param userName * @return String[] of all group names. */ @Override - public String[] getGroups(String userName) { + public String[] getGroups(String userName) + { ArrayList<String> allGroups = listAllGroupsInherited(ph.getUser(userName).getGroup()); - for (Group subg : ph.getUser(userName).subGroupListCopy()) { + for (Group subg : ph.getUser(userName).subGroupListCopy()) + { allGroups.addAll(listAllGroupsInherited(subg)); } @@ -1041,36 +1185,42 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { /** * A Breadth-first search thru inheritance model. - * - * Just a model to copy and paste. This will guarantee the closer groups - * will be checked first. - * + * + * Just a model to copy and paste. This will guarantee the closer groups will be checked first. + * * @param start * @param targerPermission * @return */ @SuppressWarnings("unused") - private Group breadthFirstSearch(Group start, String targerPermission) { + private Group breadthFirstSearch(Group start, String targerPermission) + { - if (start == null || targerPermission == null) { + if (start == null || targerPermission == null) + { return null; } LinkedList<Group> stack = new LinkedList<Group>(); ArrayList<Group> alreadyVisited = new ArrayList<Group>(); stack.push(start); alreadyVisited.add(start); - while (!stack.isEmpty()) { + while (!stack.isEmpty()) + { Group now = stack.pop(); PermissionCheckResult resultNow = checkGroupOnlyPermission(now, targerPermission); - if (resultNow.resultType.equals(PermissionCheckResult.Type.EXCEPTION) || resultNow.resultType.equals(PermissionCheckResult.Type.FOUND)) { + if (resultNow.resultType.equals(PermissionCheckResult.Type.EXCEPTION) || resultNow.resultType.equals(PermissionCheckResult.Type.FOUND)) + { return now; } - if (resultNow.resultType.equals(PermissionCheckResult.Type.NEGATION)) { + if (resultNow.resultType.equals(PermissionCheckResult.Type.NEGATION)) + { return null; } - for (String sonName : now.getInherits()) { + for (String sonName : now.getInherits()) + { Group son = ph.getGroup(sonName); - if (son != null && !alreadyVisited.contains(son)) { + if (son != null && !alreadyVisited.contains(son)) + { stack.push(son); alreadyVisited.add(son); } @@ -1080,23 +1230,30 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } @Override - public Group getDefaultGroup() { + public Group getDefaultGroup() + { return ph.getDefaultGroup(); } @Override - public String getInfoString(String entryName, String path, boolean isGroup) { + public String getInfoString(String entryName, String path, boolean isGroup) + { - if (isGroup) { + if (isGroup) + { Group data = ph.getGroup(entryName); - if (data == null) { + if (data == null) + { return null; } return data.getVariables().getVarString(path); - } else { + } + else + { User data = ph.getUser(entryName); - if (data == null) { + if (data == null) + { return null; } return data.getVariables().getVarString(path); @@ -1104,17 +1261,23 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } @Override - public int getInfoInteger(String entryName, String path, boolean isGroup) { + public int getInfoInteger(String entryName, String path, boolean isGroup) + { - if (isGroup) { + if (isGroup) + { Group data = ph.getGroup(entryName); - if (data == null) { + if (data == null) + { return -1; } return data.getVariables().getVarInteger(path); - } else { + } + else + { User data = ph.getUser(entryName); - if (data == null) { + if (data == null) + { return -1; } return data.getVariables().getVarInteger(path); @@ -1122,17 +1285,23 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } @Override - public double getInfoDouble(String entryName, String path, boolean isGroup) { + public double getInfoDouble(String entryName, String path, boolean isGroup) + { - if (isGroup) { + if (isGroup) + { Group data = ph.getGroup(entryName); - if (data == null) { + if (data == null) + { return -1; } return data.getVariables().getVarDouble(path); - } else { + } + else + { User data = ph.getUser(entryName); - if (data == null) { + if (data == null) + { return -1; } return data.getVariables().getVarDouble(path); @@ -1141,17 +1310,23 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } @Override - public boolean getInfoBoolean(String entryName, String path, boolean isGroup) { + public boolean getInfoBoolean(String entryName, String path, boolean isGroup) + { - if (isGroup) { + if (isGroup) + { Group data = ph.getGroup(entryName); - if (data == null) { + if (data == null) + { return false; } return data.getVariables().getVarBoolean(path); - } else { + } + else + { User data = ph.getUser(entryName); - if (data == null) { + if (data == null) + { return false; } return data.getVariables().getVarBoolean(path); @@ -1159,25 +1334,29 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { } @Override - public void addUserInfo(String name, String path, Object data) { + public void addUserInfo(String name, String path, Object data) + { ph.getUser(name).getVariables().addVar(path, data); } @Override - public void removeUserInfo(String name, String path) { + public void removeUserInfo(String name, String path) + { ph.getUser(name).getVariables().removeVar(path); } @Override - public void addGroupInfo(String name, String path, Object data) { + public void addGroupInfo(String name, String path, Object data) + { ph.getGroup(name).getVariables().addVar(path, data); } @Override - public void removeGroupInfo(String name, String path) { + public void removeGroupInfo(String name, String path) + { ph.getGroup(name).getVariables().removeVar(path); } |