diff options
author | ElgarL <ElgarL@palmergames.com> | 2011-09-20 10:35:05 +0100 |
---|---|---|
committer | ElgarL <ElgarL@palmergames.com> | 2011-09-20 10:35:05 +0100 |
commit | f2dd51cf573ccf403f687e5a863ba449af77b766 (patch) | |
tree | 38e1140caf0d2abb7cafae0324cb1dee86a39849 | |
parent | d3f6e82474c2c67a3fb17a7b08a8a94b8eb7ae60 (diff) | |
download | Essentials-f2dd51cf573ccf403f687e5a863ba449af77b766.tar Essentials-f2dd51cf573ccf403f687e5a863ba449af77b766.tar.gz Essentials-f2dd51cf573ccf403f687e5a863ba449af77b766.tar.lz Essentials-f2dd51cf573ccf403f687e5a863ba449af77b766.tar.xz Essentials-f2dd51cf573ccf403f687e5a863ba449af77b766.zip |
Fix for pushing perms of non superperms supporting plugins
3 files changed, 99 insertions, 8 deletions
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 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<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();
/*
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); } |