From 2bc9f2e38668e98eb1ad2d460ab167e3da9c2678 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Tue, 25 Sep 2012 22:21:15 +0100 Subject: [PATCH] Handle negated wildcard perms in generic superperms --- .../essentials/perm/SuperpermsHandler.java | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java index 5dbe9eb93..0b4b93058 100644 --- a/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java +++ b/Essentials/src/com/earth2me/essentials/perm/SuperpermsHandler.java @@ -31,29 +31,26 @@ public class SuperpermsHandler implements IPermissionsHandler } @Override - public boolean hasPermission(final Player base, final String node) + public boolean hasPermission(final Player base, String node) { - if (base.hasPermission("*")) + String permCheck = node; + int index; + while (true) { - return true; - } - if (base.hasPermission("-" + node)) - { - return false; - } - final String[] parts = node.split("\\."); - final StringBuilder builder = new StringBuilder(node.length()); - for (String part : parts) - { - builder.append('*'); - if (base.hasPermission(builder.toString())) + if (base.isPermissionSet(permCheck)) { - return true; + return base.hasPermission(permCheck); } - builder.deleteCharAt(builder.length() - 1); - builder.append(part).append('.'); + + index = node.lastIndexOf('.'); + if (index < 1) + { + return base.hasPermission("*"); + } + + node = node.substring(0, index); + permCheck = node + ".*"; } - return base.hasPermission(node); } @Override