Fix trying to modify an unmodifiable collection breaking superperms.

This commit is contained in:
ElgarL 2012-01-25 01:20:44 +00:00
parent f40f5f880b
commit e1660d47ba
2 changed files with 33 additions and 31 deletions

View File

@ -117,4 +117,5 @@ v 1.9:
- Changed addSubGroup() to only add the group if it doesn't already exist (no need to update an already existing group).
- addSubGroup now returns a boolean for success/failure.
- '/manuaddsub' now correctly reports if it was able to add the sub group.
- Allow negation to the * permission node when populating superperms.
- Allow negation to the * permission node when populating superperms.
- Fix trying to modify an unmodifiable collection breaking superperms.

View File

@ -153,41 +153,42 @@ public class AnjoPermissionsHandler extends PermissionsReaderInterface {
// Allow * node to populate ALL perms in Bukkit.
if (perms.contains("*")) {
permArray.addAll(GroupManager.BukkitPermissions.getAllRegisteredPermissions(includeChildren));
perms.remove("*");
}
for (String perm : perms) {
boolean negated = false;
if (perm.startsWith("-"))
negated = true;
if (!permArray.contains(perm)) {
permArray.add(perm);
if (!perm.equalsIgnoreCase("*")) {
boolean negated = false;
if (perm.startsWith("-"))
negated = true;
if ((negated) && (permArray.contains(perm.substring(1))))
permArray.remove(perm.substring(1));
if (includeChildren) {
Map<String, Boolean> children = GroupManager.BukkitPermissions.getAllChildren((negated ? perm.substring(1) : perm), new HashSet<String>());
if (children != null) {
if (negated) {
// Remove children of negated nodes
for (String child : children.keySet())
if (children.get(child))
if (permArray.contains(child))
permArray.remove(child);
} else {
// Add child nodes
for (String child : children.keySet())
if (children.get(child))
if ((!permArray.contains(child)) && (!permArray.contains("-" + child)))
permArray.add(child);
if (!permArray.contains(perm)) {
permArray.add(perm);
if ((negated) && (permArray.contains(perm.substring(1))))
permArray.remove(perm.substring(1));
if (includeChildren) {
Map<String, Boolean> children = GroupManager.BukkitPermissions.getAllChildren((negated ? perm.substring(1) : perm), new HashSet<String>());
if (children != null) {
if (negated) {
// Remove children of negated nodes
for (String child : children.keySet())
if (children.get(child))
if (permArray.contains(child))
permArray.remove(child);
} else {
// Add child nodes
for (String child : children.keySet())
if (children.get(child))
if ((!permArray.contains(child)) && (!permArray.contains("-" + child)))
permArray.add(child);
}
}
}
}