From d3f6e82474c2c67a3fb17a7b08a8a94b8eb7ae60 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Mon, 19 Sep 2011 22:51:07 +0100 Subject: - Push updates to superperms for all valid GM commands. --- EssentialsGroupManager/src/Changelog.txt | 4 +- .../org/anjocaido/groupmanager/GroupManager.java | 43 +++++++++++++++++++++- .../permissions/BukkitPermissions.java | 34 ++++++++--------- 3 files changed, 60 insertions(+), 21 deletions(-) (limited to 'EssentialsGroupManager') diff --git a/EssentialsGroupManager/src/Changelog.txt b/EssentialsGroupManager/src/Changelog.txt index 56f52a998..7777af29d 100644 --- a/EssentialsGroupManager/src/Changelog.txt +++ b/EssentialsGroupManager/src/Changelog.txt @@ -9,5 +9,5 @@ v 1.1: - Fix for Users.yml containing only 'users:' causing a crash. - GroupManager will now generate a fresh Users and Groups yml if either file is empty. - Fix for an infinite loop bug with the new Bukkit Perms during a new user creation. -v 1.2: - - Fixed BukkitPerms population. Wasn't correctly setting superperms. \ No newline at end of file + - Fixed BukkitPerms population. Wasn't correctly setting superperms. + - Push updates to superperms for all valid GM commands. \ 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 e0a29f509..8e77e2f07 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java @@ -208,7 +208,7 @@ public class GroupManager extends JavaPlugin { public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { boolean playerCanDo = false; boolean isConsole = false; - Player senderPlayer = null; + Player senderPlayer = null, targetPlayer = null; Group senderGroup = null; User senderUser = null; @@ -340,6 +340,9 @@ public class GroupManager extends JavaPlugin { //PARECE OK auxUser.setGroup(auxGroup); sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' group to '" + auxGroup.getName() + "'."); + + targetPlayer = this.getServer().getPlayer(auxUser.getName()); + if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer); return true; //break; @@ -374,6 +377,9 @@ public class GroupManager extends JavaPlugin { //PARECE OK dataHolder.removeUser(auxUser.getName()); sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' to default settings."); + + targetPlayer = this.getServer().getPlayer(auxUser.getName()); + if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer); return true; case manuaddsub: @@ -416,6 +422,9 @@ public class GroupManager extends JavaPlugin { auxUser.addSubGroup(auxGroup); sender.sendMessage(ChatColor.YELLOW + "You changed player '" + auxUser.getName() + "' group to '" + auxGroup.getName() + "'."); + targetPlayer = this.getServer().getPlayer(auxUser.getName()); + if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer); + return true; case manudelsub: //VALIDANDO ESTADO DO SENDER @@ -449,6 +458,9 @@ public class GroupManager extends JavaPlugin { auxUser.removeSubGroup(auxGroup); sender.sendMessage(ChatColor.YELLOW + "You removed subgroup '" + auxGroup.getName() + "' from player '" + auxUser.getName() + "' list."); + targetPlayer = this.getServer().getPlayer(auxUser.getName()); + if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer); + return true; case mangadd: //VALIDANDO ESTADO DO SENDER @@ -491,6 +503,8 @@ public class GroupManager extends JavaPlugin { dataHolder.removeGroup(auxGroup.getName()); sender.sendMessage(ChatColor.YELLOW + "You deleted a group named " + auxGroup.getName() + ", it's users are default group now."); + BukkitPermissions.updateAllPlayers(); + return true; case manuaddp: //VALIDANDO ESTADO DO SENDER @@ -554,6 +568,10 @@ public class GroupManager extends JavaPlugin { //PARECE OK auxUser.addPermission(args[1]); sender.sendMessage(ChatColor.YELLOW + "You added '" + args[1] + "' to player '" + auxUser.getName() + "' permissions."); + + targetPlayer = this.getServer().getPlayer(auxUser.getName()); + if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer); + return true; //break; case manudelp: @@ -604,6 +622,9 @@ public class GroupManager extends JavaPlugin { //PARECE OK auxUser.removePermission(args[1]); sender.sendMessage(ChatColor.YELLOW + "You removed '" + args[1] + "' from player '" + auxUser.getName() + "' permissions."); + + targetPlayer = this.getServer().getPlayer(auxUser.getName()); + if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer); return true; //break; @@ -759,6 +780,8 @@ public class GroupManager extends JavaPlugin { //PARECE OK auxGroup.addPermission(args[1]); sender.sendMessage(ChatColor.YELLOW + "You added '" + args[1] + "' to group '" + auxGroup.getName() + "' permissions."); + + BukkitPermissions.updateAllPlayers(); return true; case mangdelp: @@ -799,6 +822,8 @@ public class GroupManager extends JavaPlugin { auxGroup.removePermission(args[1]); sender.sendMessage(ChatColor.YELLOW + "You removed '" + args[1] + "' from group '" + auxGroup.getName() + "' permissions."); + BukkitPermissions.updateAllPlayers(); + return true; case manglistp: //VALIDANDO ESTADO DO SENDER @@ -912,6 +937,8 @@ public class GroupManager extends JavaPlugin { auxGroup.addInherits(auxGroup2); sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " is now in " + auxGroup.getName() + " inheritance list."); + BukkitPermissions.updateAllPlayers(); + return true; case mangdeli: //VALIDANDO ESTADO DO SENDER @@ -947,6 +974,8 @@ public class GroupManager extends JavaPlugin { auxGroup.removeInherits(auxGroup2.getName()); sender.sendMessage(ChatColor.RED + "Group " + auxGroup2.getName() + " was removed from " + auxGroup.getName() + " inheritance list."); + BukkitPermissions.updateAllPlayers(); + return true; case manuaddv: //VALIDANDO ESTADO DO SENDER @@ -1394,6 +1423,9 @@ public class GroupManager extends JavaPlugin { } worldsHolder.loadWorld(auxString); sender.sendMessage("The request to world '" + auxString + "' was sent."); + + BukkitPermissions.updateAllPlayers(); + return true; } //VALIDANDO ESTADO DO SENDER @@ -1418,6 +1450,9 @@ public class GroupManager extends JavaPlugin { sender.sendMessage(ChatColor.YELLOW + " The current world was reloaded."); } worldsHolder.mirrorSetUp(); + + BukkitPermissions.updateAllPlayers(); + return true; case listgroups: //VALIDANDO ESTADO DO SENDER @@ -1487,6 +1522,9 @@ public class GroupManager extends JavaPlugin { //PARECE OK auxUser.setGroup(auxGroup); sender.sendMessage(ChatColor.YELLOW + "You changed " + auxUser.getName() + " group to " + auxGroup.getName() + "."); + + targetPlayer = this.getServer().getPlayer(auxUser.getName()); + if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer); return true; //break; @@ -1542,6 +1580,9 @@ public class GroupManager extends JavaPlugin { //PARECE OK auxUser.setGroup(auxGroup); sender.sendMessage(ChatColor.YELLOW + "You changed " + auxUser.getName() + " group to " + auxGroup.getName() + "."); + + targetPlayer = this.getServer().getPlayer(auxUser.getName()); + if (targetPlayer != null) BukkitPermissions.updatePermissions(targetPlayer); return true; //break; diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java index fe381c127..c88f48d6c 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -18,12 +18,13 @@ package org.anjocaido.groupmanager.permissions; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; import org.anjocaido.groupmanager.GroupManager; import org.anjocaido.groupmanager.data.User; +import org.anjocaido.groupmanager.dataholder.OverloadedWorldHolder; +import org.anjocaido.groupmanager.utils.PermissionCheckResult; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -40,6 +41,7 @@ import org.bukkit.event.server.PluginEnableEvent; import org.bukkit.event.server.ServerListener; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionAttachment; +import org.bukkit.permissions.PermissionAttachmentInfo; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; @@ -114,9 +116,10 @@ public class BukkitPermissions { } PermissionAttachment attachment = this.attachments.get(player); + + OverloadedWorldHolder worldData = GroupManager.getWorldsHolder().getWorldData(world); - User user = GroupManager.getWorldsHolder().getWorldData(world).getUser(player.getName()); - List permissions = user.getGroup().getPermissionList(); + User user = worldData.getUser(player.getName()); // clear permissions for (String permission : attachment.getPermissions().keySet()) { @@ -125,24 +128,19 @@ public class BukkitPermissions { // find matching permissions for (Permission permission : registeredPermissions) { - boolean permissionValue = user.getGroup().hasSamePermissionNode(permission.getName()); - attachment.setPermission(permission, permissionValue); - } - - // all permissions - for (String permission : permissions) { - Boolean value = true; - if (permission.startsWith("-")) { - permission = permission.substring(1); // cut off - + PermissionCheckResult permissionResult = worldData.getPermissionsHandler().checkFullUserPermission(user, permission.getName()); + Boolean value = false; + if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { value = false; - } - - if (!attachment.getPermissions().containsKey(permission)) { - attachment.setPermission(permission, value); - } - } + } else if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND)) + value = true; + + + attachment.setPermission(permission, value); + } player.recalculatePermissions(); + /* // List perms for this player GroupManager.logger.info("Attachment Permissions:"); -- cgit v1.2.3 From f2dd51cf573ccf403f687e5a863ba449af77b766 Mon Sep 17 00:00:00 2001 From: ElgarL Date: Tue, 20 Sep 2011 10:35:05 +0100 Subject: Fix for pushing perms of non superperms supporting plugins --- .../permissions/AnjoPermissionsHandler.java | 70 ++++++++++++++++++++++ .../permissions/BukkitPermissions.java | 33 +++++++--- .../permissions/PermissionsReaderInterface.java | 4 ++ 3 files changed, 99 insertions(+), 8 deletions(-) mode change 100755 => 100644 EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java mode change 100755 => 100644 EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java (limited to 'EssentialsGroupManager') diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java old mode 100755 new mode 100644 index b892e653e..5830f0c88 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java @@ -79,6 +79,76 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface { public String getGroup(String userName) { return ph.getUser(userName).getGroup().getName(); } + + /** + * Returns All permissions (including inheritance) of player name. + * @param userName + * @return + */ + @Override + public List getAllPlayersPermissions(String userName) { + + User user = ph.getUser(userName); + List playerPermArray = new ArrayList(user.getPermissionList()); + List playerMainGroupPermArray = new ArrayList(user.getGroup().getPermissionList()); + List subGroupsPermArray = new ArrayList(); + List returnPermArray = new ArrayList(); + + for (String subGroup : user.subGroupListStringCopy()) { + subGroupsPermArray.addAll(ph.getGroup(subGroup).getPermissionList()); + } + + for (String permission : subGroupsPermArray) { + /* + * Add each Negated permission + * unless it's being overridden by a higher permission + */ + if (permission.startsWith("-") + && !playerMainGroupPermArray.contains(permission.substring(1)) + && !playerPermArray.contains(permission.substring(1)) + && !playerMainGroupPermArray.contains("*") + && !playerPermArray.contains("*")) { + if (!returnPermArray.contains(permission)) { + returnPermArray.add(permission); + } + } else + if (!returnPermArray.contains(permission) + && !playerMainGroupPermArray.contains("-"+permission) + && !playerPermArray.contains("-"+permission)) { + returnPermArray.add(permission); + } + } + + for (String permission : playerMainGroupPermArray) { + /* + * Add each Negated permission + * unless it's being overridden by a higher permission + */ + if (permission.startsWith("-") + && !playerPermArray.contains(permission.substring(1)) + && !playerMainGroupPermArray.contains("*") + && !playerPermArray.contains("*")) { + if (!returnPermArray.contains(permission)) { + returnPermArray.add(permission); + } + } else + if (!returnPermArray.contains(permission) + && !playerPermArray.contains("-"+permission)) { + returnPermArray.add(permission); + } + } + + for (String permission : playerPermArray) { + /* + * Add each permission + */ + if (!returnPermArray.contains(permission)) { + returnPermArray.add(permission); + } + } + + return returnPermArray; + } /** * Verify if player is in suck group. diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java index c88f48d6c..b82a8f473 100644 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java @@ -16,8 +16,10 @@ package org.anjocaido.groupmanager.permissions; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -115,11 +117,12 @@ public class BukkitPermissions { world = player.getWorld().getName(); } + // All permissions registered with Bukkit for this player PermissionAttachment attachment = this.attachments.get(player); OverloadedWorldHolder worldData = GroupManager.getWorldsHolder().getWorldData(world); - User user = worldData.getUser(player.getName()); + User user = worldData.getUser(player.getName()); // clear permissions for (String permission : attachment.getPermissions().keySet()) { @@ -127,18 +130,32 @@ public class BukkitPermissions { } // find matching permissions + PermissionCheckResult permissionResult; + Boolean value; for (Permission permission : registeredPermissions) { - PermissionCheckResult permissionResult = worldData.getPermissionsHandler().checkFullUserPermission(user, permission.getName()); - Boolean value = false; - if (permissionResult.resultType.equals(PermissionCheckResult.Type.NEGATION)) { - value = false; - } else if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND)) + permissionResult = worldData.getPermissionsHandler().checkFullUserPermission(user, permission.getName()); + if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND)) value = true; - + else + value = false; attachment.setPermission(permission, value); - } + } + // Add any missing permissions for this player (non bukkit plugins) + List playerPermArray = new ArrayList(worldData.getPermissionsHandler().getAllPlayersPermissions(player.getName())); + + for (String permission : playerPermArray) { + value = true; + if (permission.startsWith("-")) { + permission = permission.substring(1); // cut off - + value = false; + } + + if (!attachment.getPermissions().containsKey(permission)) { + attachment.setPermission(permission, value); + } + } player.recalculatePermissions(); /* diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java old mode 100755 new mode 100644 index ede097ea4..bdad6f186 --- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java +++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java @@ -3,6 +3,8 @@ package org.anjocaido.groupmanager.permissions; //import java.util.Collection; //import java.util.Map; //import java.util.Set; +import java.util.List; + import org.anjocaido.groupmanager.data.Group; //import org.anjocaido.groupmanager.data.User; import org.bukkit.entity.Player; @@ -229,4 +231,6 @@ public abstract class PermissionsReaderInterface { public abstract void removeGroupInfo(String name, String path); ////////////////////////////// + + public abstract List getAllPlayersPermissions(String userName); } -- cgit v1.2.3