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, 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;

View File

@@ -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();
}

View File

@@ -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)
{
perm = new Permission(permission, defaultPerm);
pluginManager.addPermission(perm);
if (parent != null)
{
parent.getChildren().put(perm.getName(), Boolean.TRUE);
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
{
final String parentPermission = perm.getParentPermission();
if (parentPermission != null && sender.isPermissionSet(parentPermission))
{
return sender.hasPermission(parentPermission);
}
else
{
return perm.getPermissionDefault().getValue(sender.isOp());
}
parent = perm;
}
perm.recalculatePermissibles();
return perm;
}
}

View File

@@ -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
*/
@Override
public PermissionDefault getPermissionDefault()
{
return PermissionDefault.OP;
}
@Override
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.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()
{
@@ -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);
}
}

View File

@@ -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)
@@ -121,6 +118,7 @@ public enum Permissions implements IPermission
}
return perm;
}
public static IPermission getCraftPermission(final Material 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 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);
}
}