1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-12 01:25:26 +02:00

New permission checks, now only registers the parent nodes and needs two checks. This combines the 2.9 and 3.0 permission check methods.

This commit is contained in:
snowleo
2012-10-03 15:57:37 +02:00
parent 53b512415e
commit b677dbfb25
7 changed files with 67 additions and 73 deletions

View File

@@ -106,11 +106,9 @@ public class Essentials implements IEssentials
logger.log(Level.INFO, I18n._("usingTempFolderForTesting")); logger.log(Level.INFO, I18n._("usingTempFolderForTesting"));
logger.log(Level.INFO, dataFolder.toString()); 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); settings = new SettingsHolder(this);
i18n.updateLocale("en"); i18n.updateLocale("en");
userMap = new UserMap(this); userMap = new UserMap(this);
//permissionsHandler = new PermissionsHandler(this);
economy = new Economy(this); economy = new Economy(this);
} }
@@ -124,15 +122,10 @@ public class Essentials implements IEssentials
execTimer.mark("BukkitCheck"); execTimer.mark("BukkitCheck");
//final EssentialsUpgrade upgrade = new EssentialsUpgrade(this);
//upgrade.beforeSettings();
//execTimer.mark("Upgrade");
reloadList = new ArrayList<IReload>(); reloadList = new ArrayList<IReload>();
settings = new SettingsHolder(this); settings = new SettingsHolder(this);
reloadList.add(settings); reloadList.add(settings);
execTimer.mark("Settings"); execTimer.mark("Settings");
//upgrade.afterSettings();
//execTimer.mark("Upgrade2");
i18n.updateLocale(settings.getLocale()); i18n.updateLocale(settings.getLocale());
userMap = new UserMap(this); userMap = new UserMap(this);
reloadList.add(userMap); reloadList.add(userMap);
@@ -158,7 +151,6 @@ public class Essentials implements IEssentials
onReload(); onReload();
backup = new Backup(this); backup = new Backup(this);
//permissionsHandler = new PermissionsHandler(this);
jails = new Jails(this); jails = new Jails(this);
reloadList.add(jails); reloadList.add(jails);
@@ -338,6 +330,7 @@ public class Essentials implements IEssentials
return economy; return economy;
} }
@Override
public SpawnsHolder getSpawns() public SpawnsHolder getSpawns()
{ {
return spawns; return spawns;

View File

@@ -1,18 +1,16 @@
package net.ess3.api; package net.ess3.api;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault; import org.bukkit.permissions.PermissionDefault;
public interface IPermission public interface IPermission
{ {
String getPermissionName(); String getPermissionName();
boolean isAuthorized(CommandSender sender); boolean isAuthorized(CommandSender sender);
Permission getPermission(); String getParentPermission();
PermissionDefault getPermissionDefault(); PermissionDefault getPermissionDefault();
} }

View File

@@ -1,7 +1,9 @@
package net.ess3.bukkit; 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.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault; import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
@@ -9,17 +11,20 @@ import org.bukkit.plugin.PluginManager;
public class PermissionFactory public class PermissionFactory
{ {
private static transient final Pattern DOT_PATTERN = Pattern.compile("\\."); public static String registerParentPermission(String permission)
public static Permission registerPermission(String permission, PermissionDefault defaultPerm)
{ {
final PluginManager pluginManager = Bukkit.getServer().getPluginManager(); 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()); final StringBuilder builder = new StringBuilder(permission.length());
Permission parent = null; 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(); String permString = builder.toString();
Permission perm = pluginManager.getPermission(permString); Permission perm = pluginManager.getPermission(permString);
if (perm == null) if (perm == null)
@@ -31,21 +36,31 @@ public class PermissionFactory
parent.getChildren().put(perm.getName(), Boolean.TRUE); parent.getChildren().put(perm.getName(), Boolean.TRUE);
} }
parent = perm; parent = perm;
perm.recalculatePermissibles();
} }
builder.deleteCharAt(builder.length() - 1); builder.deleteCharAt(builder.length() - 1);
} }
Permission perm = pluginManager.getPermission(permission); return parent == null ? null : parent.getName();
if (perm == null) }
public static boolean checkPermission(CommandSender sender, IPermission perm)
{
final String permission = perm.getPermissionName();
if (sender.isPermissionSet(permission))
{ {
perm = new Permission(permission, defaultPerm); return sender.hasPermission(permission);
pluginManager.addPermission(perm); }
if (parent != null) else
{ {
parent.getChildren().put(perm.getName(), Boolean.TRUE); final String parentPermission = perm.getParentPermission();
} if (parentPermission != null && sender.isPermissionSet(parentPermission))
parent = perm; {
return sender.hasPermission(parentPermission);
}
else
{
return perm.getPermissionDefault().getValue(sender.isOp());
}
} }
perm.recalculatePermissibles();
return perm;
} }
} }

View File

@@ -3,44 +3,40 @@ package net.ess3.permissions;
import net.ess3.api.IPermission; import net.ess3.api.IPermission;
import net.ess3.bukkit.PermissionFactory; import net.ess3.bukkit.PermissionFactory;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault; import org.bukkit.permissions.PermissionDefault;
public abstract class AbstractSuperpermsPermission implements IPermission public abstract class AbstractSuperpermsPermission implements IPermission
{ {
//todo - sort all this out private String parent = null;
protected Permission bukkitPerm;
@Override @Override
public Permission getPermission() public String getParentPermission()
{ {
if (bukkitPerm != null) if (parent != null)
{ {
return bukkitPerm; return parent;
} }
else else
{ {
return PermissionFactory.registerPermission(getPermissionName(), getPermissionDefault()); return PermissionFactory.registerParentPermission(getPermissionName());
} }
} }
/** /**
* PermissionDefault is OP, if the method is not overwritten. * PermissionDefault is OP, if the method is not overwritten.
* @return *
* @return
*/ */
@Override @Override
public PermissionDefault getPermissionDefault() public PermissionDefault getPermissionDefault()
{ {
return PermissionDefault.OP; return PermissionDefault.OP;
} }
@Override @Override
public boolean isAuthorized(final CommandSender sender) public boolean isAuthorized(final CommandSender sender)
{ {
return sender.hasPermission(getPermission()); return PermissionFactory.checkPermission(sender, this);
} }
} }

View File

@@ -4,7 +4,6 @@ import java.util.Locale;
import net.ess3.api.IPermission; import net.ess3.api.IPermission;
import net.ess3.bukkit.PermissionFactory; import net.ess3.bukkit.PermissionFactory;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault; import org.bukkit.permissions.PermissionDefault;
@@ -96,7 +95,7 @@ public enum Permissions implements IPermission
private static final String base = "essentials."; private static final String base = "essentials.";
private final String permission; private final String permission;
private final PermissionDefault defaultPerm; private final PermissionDefault defaultPerm;
private transient Permission bukkitPerm = null; private transient String parent = null;
private Permissions() private Permissions()
{ {
@@ -104,7 +103,7 @@ public enum Permissions implements IPermission
} }
private Permissions(final PermissionDefault defaultPerm) private Permissions(final PermissionDefault defaultPerm)
{ {
permission = base + toString().toLowerCase(Locale.ENGLISH).replace('_', '.'); permission = base + toString().toLowerCase(Locale.ENGLISH).replace('_', '.');
this.defaultPerm = defaultPerm; this.defaultPerm = defaultPerm;
} }
@@ -115,33 +114,28 @@ public enum Permissions implements IPermission
return permission; return permission;
} }
@Override @Override
public Permission getPermission() public String getParentPermission()
{ {
if (bukkitPerm != null) if (parent != null)
{ {
return bukkitPerm; return parent;
} }
else else
{ {
return PermissionFactory.registerPermission(getPermissionName(), getPermissionDefault()); return PermissionFactory.registerParentPermission(getPermissionName());
} }
} }
@Override @Override
public PermissionDefault getPermissionDefault() public PermissionDefault getPermissionDefault()
{ {
return this.defaultPerm; return this.defaultPerm;
} }
@Override @Override
public boolean isAuthorized(CommandSender sender) public boolean isAuthorized(CommandSender sender)
{ {
return sender.hasPermission(getPermission()); return PermissionFactory.checkPermission(sender, this);
} }
} }

View File

@@ -7,13 +7,11 @@ import net.ess3.bukkit.PermissionFactory;
import net.ess3.permissions.BasePermission; import net.ess3.permissions.BasePermission;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault; import org.bukkit.permissions.PermissionDefault;
public enum Permissions implements IPermission public enum Permissions implements IPermission
{ {
BLACKLIST_ALLOWPLACEMENT, BLACKLIST_ALLOWPLACEMENT,
BLACKLIST_ALLOWUSAGE, BLACKLIST_ALLOWUSAGE,
BLACKLIST_ALLOWBREAK, BLACKLIST_ALLOWBREAK,
@@ -22,7 +20,7 @@ public enum Permissions implements IPermission
private static final String base = "essentials.build."; private static final String base = "essentials.build.";
private final String permission; private final String permission;
private final PermissionDefault defaultPerm; private final PermissionDefault defaultPerm;
private transient Permission bukkitPerm = null; private transient String parent = null;
private Permissions() private Permissions()
{ {
@@ -42,15 +40,15 @@ public enum Permissions implements IPermission
} }
@Override @Override
public Permission getPermission() public String getParentPermission()
{ {
if (bukkitPerm != null) if (parent != null)
{ {
return bukkitPerm; return parent;
} }
else else
{ {
return PermissionFactory.registerPermission(getPermissionName(), getPermissionDefault()); return PermissionFactory.registerParentPermission(getPermissionName());
} }
} }
@@ -63,9 +61,8 @@ public enum Permissions implements IPermission
@Override @Override
public boolean isAuthorized(final CommandSender sender) 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); private static EnumMap<Material, IPermission> permissions = new EnumMap<Material, IPermission>(Material.class);
public static IPermission getPlacePermission(final Material mat) public static IPermission getPlacePermission(final Material mat)
@@ -85,7 +82,7 @@ public enum Permissions implements IPermission
} }
return perm; return perm;
} }
public static IPermission getBreakPermission(final Material mat) public static IPermission getBreakPermission(final Material mat)
{ {
IPermission perm = permissions.get(mat); IPermission perm = permissions.get(mat);
@@ -103,7 +100,7 @@ public enum Permissions implements IPermission
} }
return perm; return perm;
} }
public static IPermission getInteractPermission(final Material mat) public static IPermission getInteractPermission(final Material mat)
{ {
IPermission perm = permissions.get(mat); IPermission perm = permissions.get(mat);
@@ -121,6 +118,7 @@ public enum Permissions implements IPermission
} }
return perm; return perm;
} }
public static IPermission getCraftPermission(final Material mat) public static IPermission getCraftPermission(final Material mat)
{ {
IPermission perm = permissions.get(mat); IPermission perm = permissions.get(mat);
@@ -138,7 +136,7 @@ public enum Permissions implements IPermission
} }
return perm; return perm;
} }
public static IPermission getPickupPermission(final Material mat) public static IPermission getPickupPermission(final Material mat)
{ {
IPermission perm = permissions.get(mat); IPermission perm = permissions.get(mat);
@@ -156,7 +154,7 @@ public enum Permissions implements IPermission
} }
return perm; return perm;
} }
public static IPermission getDropPermission(final Material mat) public static IPermission getDropPermission(final Material mat)
{ {
IPermission perm = permissions.get(mat); IPermission perm = permissions.get(mat);

View File

@@ -30,7 +30,7 @@ public enum Permissions implements IPermission
private static final String base = "essentials.protect."; private static final String base = "essentials.protect.";
private final String permission; private final String permission;
private final PermissionDefault defaultPerm; private final PermissionDefault defaultPerm;
private transient Permission bukkitPerm = null; private transient String parent = null;
private Permissions() private Permissions()
{ {
@@ -50,15 +50,15 @@ public enum Permissions implements IPermission
} }
@Override @Override
public Permission getPermission() public String getParentPermission()
{ {
if (bukkitPerm != null) if (parent != null)
{ {
return bukkitPerm; return parent;
} }
else else
{ {
return PermissionFactory.registerPermission(getPermissionName(), getPermissionDefault()); return PermissionFactory.registerParentPermission(getPermissionName());
} }
} }
@@ -71,6 +71,6 @@ public enum Permissions implements IPermission
@Override @Override
public boolean isAuthorized(final CommandSender sender) public boolean isAuthorized(final CommandSender sender)
{ {
return sender.hasPermission(getPermission()); return PermissionFactory.checkPermission(sender, this);
} }
} }