summaryrefslogtreecommitdiffstats
path: root/EssentialsGroupManager
diff options
context:
space:
mode:
authorKHobbits <rob@khobbits.co.uk>2011-09-20 13:36:55 +0100
committerKHobbits <rob@khobbits.co.uk>2011-09-20 13:36:55 +0100
commit1fd5222d40bad99a7f66a44c0b85b761100e2029 (patch)
treedd1528f5dd275b00afbb041a38d6e04f8a7063c3 /EssentialsGroupManager
parentac1f2badc7680900ed9e42928d6df30dd55cc99b (diff)
parentf2dd51cf573ccf403f687e5a863ba449af77b766 (diff)
downloadEssentials-1fd5222d40bad99a7f66a44c0b85b761100e2029.tar
Essentials-1fd5222d40bad99a7f66a44c0b85b761100e2029.tar.gz
Essentials-1fd5222d40bad99a7f66a44c0b85b761100e2029.tar.lz
Essentials-1fd5222d40bad99a7f66a44c0b85b761100e2029.tar.xz
Essentials-1fd5222d40bad99a7f66a44c0b85b761100e2029.zip
Merge remote branch 'remotes/ess/groupmanager' into essmaster
Diffstat (limited to 'EssentialsGroupManager')
-rw-r--r--EssentialsGroupManager/src/Changelog.txt4
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/GroupManager.java43
-rw-r--r--[-rwxr-xr-x]EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java70
-rw-r--r--EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java35
-rw-r--r--[-rwxr-xr-x]EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java4
5 files changed, 143 insertions, 13 deletions
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/AnjoPermissionsHandler.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/AnjoPermissionsHandler.java
index b892e653e..5830f0c88 100755..100644
--- 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<String> getAllPlayersPermissions(String userName) {
+
+ User user = ph.getUser(userName);
+ List<String> playerPermArray = new ArrayList<String>(user.getPermissionList());
+ List<String> playerMainGroupPermArray = new ArrayList<String>(user.getGroup().getPermissionList());
+ List<String> subGroupsPermArray = new ArrayList<String>();
+ List<String> returnPermArray = new ArrayList<String>();
+
+ 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 fe381c127..b82a8f473 100644
--- a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java
+++ b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/BukkitPermissions.java
@@ -16,6 +16,7 @@
package org.anjocaido.groupmanager.permissions;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -24,6 +25,8 @@ 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 +43,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;
@@ -113,10 +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 = GroupManager.getWorldsHolder().getWorldData(world).getUser(player.getName());
- List<String> permissions = user.getGroup().getPermissionList();
+ User user = worldData.getUser(player.getName());
// clear permissions
for (String permission : attachment.getPermissions().keySet()) {
@@ -124,25 +130,34 @@ public class BukkitPermissions {
}
// find matching permissions
+ PermissionCheckResult permissionResult;
+ Boolean value;
for (Permission permission : registeredPermissions) {
- boolean permissionValue = user.getGroup().hasSamePermissionNode(permission.getName());
- attachment.setPermission(permission, permissionValue);
- }
+ permissionResult = worldData.getPermissionsHandler().checkFullUserPermission(user, permission.getName());
+ if (permissionResult.resultType.equals(PermissionCheckResult.Type.FOUND))
+ value = true;
+ else
+ value = false;
+
+ attachment.setPermission(permission, value);
+ }
- // all permissions
- for (String permission : permissions) {
- Boolean value = true;
+ // Add any missing permissions for this player (non bukkit plugins)
+ List<String> playerPermArray = new ArrayList<String>(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();
+
/*
// List perms for this player
GroupManager.logger.info("Attachment Permissions:");
diff --git a/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java b/EssentialsGroupManager/src/org/anjocaido/groupmanager/permissions/PermissionsReaderInterface.java
index ede097ea4..bdad6f186 100755..100644
--- 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<String> getAllPlayersPermissions(String userName);
}