diff options
author | snowleo <schneeleo@gmail.com> | 2012-10-03 15:57:37 +0200 |
---|---|---|
committer | snowleo <schneeleo@gmail.com> | 2012-10-03 15:57:37 +0200 |
commit | b677dbfb25c4fbd1bee8bff90a8f2275a437a895 (patch) | |
tree | bddd00cd9aeffa3ec88b97cd83a5603828b39196 | |
parent | 53b512415eb8524a0ca5442592c1f5eba98e6f77 (diff) | |
download | Essentials-b677dbfb25c4fbd1bee8bff90a8f2275a437a895.tar Essentials-b677dbfb25c4fbd1bee8bff90a8f2275a437a895.tar.gz Essentials-b677dbfb25c4fbd1bee8bff90a8f2275a437a895.tar.lz Essentials-b677dbfb25c4fbd1bee8bff90a8f2275a437a895.tar.xz Essentials-b677dbfb25c4fbd1bee8bff90a8f2275a437a895.zip |
New permission checks, now only registers the parent nodes and needs two checks. This combines the 2.9 and 3.0 permission check methods.
7 files changed, 65 insertions, 71 deletions
diff --git a/Essentials/src/net/ess3/Essentials.java b/Essentials/src/net/ess3/Essentials.java index 00499a574..9d0f215a3 100644 --- a/Essentials/src/net/ess3/Essentials.java +++ b/Essentials/src/net/ess3/Essentials.java @@ -106,11 +106,9 @@ public class Essentials implements IEssentials logger.log(Level.INFO, I18n._("usingTempFolderForTesting")); logger.log(Level.INFO, dataFolder.toString()); - //this.initialize(null, server, new PluginDescriptionFile(new FileReader(new File("src" + File.separator + "plugin.yml"))), dataFolder, null, null); settings = new SettingsHolder(this); i18n.updateLocale("en"); userMap = new UserMap(this); - //permissionsHandler = new PermissionsHandler(this); economy = new Economy(this); } @@ -124,15 +122,10 @@ public class Essentials implements IEssentials execTimer.mark("BukkitCheck"); - //final EssentialsUpgrade upgrade = new EssentialsUpgrade(this); - //upgrade.beforeSettings(); - //execTimer.mark("Upgrade"); reloadList = new ArrayList<IReload>(); settings = new SettingsHolder(this); reloadList.add(settings); execTimer.mark("Settings"); - //upgrade.afterSettings(); - //execTimer.mark("Upgrade2"); i18n.updateLocale(settings.getLocale()); userMap = new UserMap(this); reloadList.add(userMap); @@ -158,7 +151,6 @@ public class Essentials implements IEssentials onReload(); backup = new Backup(this); - //permissionsHandler = new PermissionsHandler(this); jails = new Jails(this); reloadList.add(jails); @@ -338,6 +330,7 @@ public class Essentials implements IEssentials return economy; } + @Override public SpawnsHolder getSpawns() { return spawns; diff --git a/Essentials/src/net/ess3/api/IPermission.java b/Essentials/src/net/ess3/api/IPermission.java index 66cf09ad0..a559fac86 100644 --- a/Essentials/src/net/ess3/api/IPermission.java +++ b/Essentials/src/net/ess3/api/IPermission.java @@ -1,18 +1,16 @@ package net.ess3.api; import org.bukkit.command.CommandSender; -import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; - public interface IPermission { String getPermissionName(); boolean isAuthorized(CommandSender sender); - Permission getPermission(); + String getParentPermission(); PermissionDefault getPermissionDefault(); } diff --git a/Essentials/src/net/ess3/bukkit/PermissionFactory.java b/Essentials/src/net/ess3/bukkit/PermissionFactory.java index 3d8c2da9b..f3e84b54b 100644 --- a/Essentials/src/net/ess3/bukkit/PermissionFactory.java +++ b/Essentials/src/net/ess3/bukkit/PermissionFactory.java @@ -1,7 +1,9 @@ package net.ess3.bukkit; -import java.util.regex.Pattern; +import java.util.StringTokenizer; +import net.ess3.api.IPermission; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.PluginManager; @@ -9,17 +11,20 @@ import org.bukkit.plugin.PluginManager; public class PermissionFactory { - private static transient final Pattern DOT_PATTERN = Pattern.compile("\\."); - - public static Permission registerPermission(String permission, PermissionDefault defaultPerm) + public static String registerParentPermission(String permission) { final PluginManager pluginManager = Bukkit.getServer().getPluginManager(); - final String[] parts = DOT_PATTERN.split(permission); + final StringTokenizer tokenizer = new StringTokenizer(permission, "."); final StringBuilder builder = new StringBuilder(permission.length()); Permission parent = null; - for (int i = 0; i < parts.length - 1; i++) + while (tokenizer.hasMoreTokens()) { - builder.append(parts[i]).append(".*"); + String part = tokenizer.nextToken(); + if (!tokenizer.hasMoreTokens()) + { + break; + } + builder.append(part).append(".*"); String permString = builder.toString(); Permission perm = pluginManager.getPermission(permString); if (perm == null) @@ -31,21 +36,31 @@ public class PermissionFactory parent.getChildren().put(perm.getName(), Boolean.TRUE); } parent = perm; + perm.recalculatePermissibles(); } builder.deleteCharAt(builder.length() - 1); } - Permission perm = pluginManager.getPermission(permission); - if (perm == null) + return parent == null ? null : parent.getName(); + } + + public static boolean checkPermission(CommandSender sender, IPermission perm) + { + final String permission = perm.getPermissionName(); + if (sender.isPermissionSet(permission)) + { + return sender.hasPermission(permission); + } + else { - perm = new Permission(permission, defaultPerm); - pluginManager.addPermission(perm); - if (parent != null) + final String parentPermission = perm.getParentPermission(); + if (parentPermission != null && sender.isPermissionSet(parentPermission)) + { + return sender.hasPermission(parentPermission); + } + else { - parent.getChildren().put(perm.getName(), Boolean.TRUE); + return perm.getPermissionDefault().getValue(sender.isOp()); } - parent = perm; } - perm.recalculatePermissibles(); - return perm; } } diff --git a/Essentials/src/net/ess3/permissions/AbstractSuperpermsPermission.java b/Essentials/src/net/ess3/permissions/AbstractSuperpermsPermission.java index 46020336b..c846a88d2 100644 --- a/Essentials/src/net/ess3/permissions/AbstractSuperpermsPermission.java +++ b/Essentials/src/net/ess3/permissions/AbstractSuperpermsPermission.java @@ -3,44 +3,40 @@ package net.ess3.permissions; import net.ess3.api.IPermission; import net.ess3.bukkit.PermissionFactory; import org.bukkit.command.CommandSender; -import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; public abstract class AbstractSuperpermsPermission implements IPermission { - //todo - sort all this out - protected Permission bukkitPerm; + private String parent = null; - @Override - public Permission getPermission() + public String getParentPermission() { - if (bukkitPerm != null) + if (parent != null) { - return bukkitPerm; + return parent; } else { - return PermissionFactory.registerPermission(getPermissionName(), getPermissionDefault()); + return PermissionFactory.registerParentPermission(getPermissionName()); } } /** * PermissionDefault is OP, if the method is not overwritten. - * @return + * + * @return */ - @Override public PermissionDefault getPermissionDefault() { return PermissionDefault.OP; } - @Override public boolean isAuthorized(final CommandSender sender) { - return sender.hasPermission(getPermission()); + return PermissionFactory.checkPermission(sender, this); } } diff --git a/Essentials/src/net/ess3/permissions/Permissions.java b/Essentials/src/net/ess3/permissions/Permissions.java index a71ae6fa0..dfc2ae7ab 100644 --- a/Essentials/src/net/ess3/permissions/Permissions.java +++ b/Essentials/src/net/ess3/permissions/Permissions.java @@ -4,7 +4,6 @@ import java.util.Locale; import net.ess3.api.IPermission; import net.ess3.bukkit.PermissionFactory; import org.bukkit.command.CommandSender; -import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; @@ -96,7 +95,7 @@ public enum Permissions implements IPermission private static final String base = "essentials."; private final String permission; private final PermissionDefault defaultPerm; - private transient Permission bukkitPerm = null; + private transient String parent = null; private Permissions() { @@ -104,7 +103,7 @@ public enum Permissions implements IPermission } private Permissions(final PermissionDefault defaultPerm) - { + { permission = base + toString().toLowerCase(Locale.ENGLISH).replace('_', '.'); this.defaultPerm = defaultPerm; } @@ -115,33 +114,28 @@ public enum Permissions implements IPermission return permission; } - - @Override - public Permission getPermission() + public String getParentPermission() { - if (bukkitPerm != null) + if (parent != null) { - return bukkitPerm; + return parent; } else { - return PermissionFactory.registerPermission(getPermissionName(), getPermissionDefault()); + return PermissionFactory.registerParentPermission(getPermissionName()); } } - @Override public PermissionDefault getPermissionDefault() { return this.defaultPerm; } - @Override public boolean isAuthorized(CommandSender sender) { - return sender.hasPermission(getPermission()); + return PermissionFactory.checkPermission(sender, this); } } - diff --git a/EssentialsAntiBuild/src/net/ess3/antibuild/Permissions.java b/EssentialsAntiBuild/src/net/ess3/antibuild/Permissions.java index 7088fb0e0..250caa4a3 100644 --- a/EssentialsAntiBuild/src/net/ess3/antibuild/Permissions.java +++ b/EssentialsAntiBuild/src/net/ess3/antibuild/Permissions.java @@ -7,13 +7,11 @@ import net.ess3.bukkit.PermissionFactory; import net.ess3.permissions.BasePermission; import org.bukkit.Material; import org.bukkit.command.CommandSender; -import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; public enum Permissions implements IPermission { - BLACKLIST_ALLOWPLACEMENT, BLACKLIST_ALLOWUSAGE, BLACKLIST_ALLOWBREAK, @@ -22,7 +20,7 @@ public enum Permissions implements IPermission private static final String base = "essentials.build."; private final String permission; private final PermissionDefault defaultPerm; - private transient Permission bukkitPerm = null; + private transient String parent = null; private Permissions() { @@ -42,15 +40,15 @@ public enum Permissions implements IPermission } @Override - public Permission getPermission() + public String getParentPermission() { - if (bukkitPerm != null) + if (parent != null) { - return bukkitPerm; + return parent; } else { - return PermissionFactory.registerPermission(getPermissionName(), getPermissionDefault()); + return PermissionFactory.registerParentPermission(getPermissionName()); } } @@ -63,9 +61,8 @@ public enum Permissions implements IPermission @Override public boolean isAuthorized(final CommandSender sender) { - return sender.hasPermission(getPermission()); + return PermissionFactory.checkPermission(sender, this); } - private static EnumMap<Material, IPermission> permissions = new EnumMap<Material, IPermission>(Material.class); public static IPermission getPlacePermission(final Material mat) @@ -85,7 +82,7 @@ public enum Permissions implements IPermission } return perm; } - + public static IPermission getBreakPermission(final Material mat) { IPermission perm = permissions.get(mat); @@ -103,7 +100,7 @@ public enum Permissions implements IPermission } return perm; } - + public static IPermission getInteractPermission(final Material mat) { IPermission perm = permissions.get(mat); @@ -121,6 +118,7 @@ public enum Permissions implements IPermission } return perm; } + public static IPermission getCraftPermission(final Material mat) { IPermission perm = permissions.get(mat); @@ -138,7 +136,7 @@ public enum Permissions implements IPermission } return perm; } - + public static IPermission getPickupPermission(final Material mat) { IPermission perm = permissions.get(mat); @@ -156,7 +154,7 @@ public enum Permissions implements IPermission } return perm; } - + public static IPermission getDropPermission(final Material mat) { IPermission perm = permissions.get(mat); diff --git a/EssentialsProtect/src/net/ess3/protect/Permissions.java b/EssentialsProtect/src/net/ess3/protect/Permissions.java index f9a6aad7b..2a7db4130 100644 --- a/EssentialsProtect/src/net/ess3/protect/Permissions.java +++ b/EssentialsProtect/src/net/ess3/protect/Permissions.java @@ -30,7 +30,7 @@ public enum Permissions implements IPermission private static final String base = "essentials.protect."; private final String permission; private final PermissionDefault defaultPerm; - private transient Permission bukkitPerm = null; + private transient String parent = null; private Permissions() { @@ -50,15 +50,15 @@ public enum Permissions implements IPermission } @Override - public Permission getPermission() + public String getParentPermission() { - if (bukkitPerm != null) + if (parent != null) { - return bukkitPerm; + return parent; } else { - return PermissionFactory.registerPermission(getPermissionName(), getPermissionDefault()); + return PermissionFactory.registerParentPermission(getPermissionName()); } } @@ -71,6 +71,6 @@ public enum Permissions implements IPermission @Override public boolean isAuthorized(final CommandSender sender) { - return sender.hasPermission(getPermission()); + return PermissionFactory.checkPermission(sender, this); } } |