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:
@@ -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;
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user