Return more detailed information about exactly how a permission check result was determined
This commit is contained in:
@@ -29,6 +29,7 @@ import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.bukkit.LPBukkitPlugin;
|
||||
import me.lucko.luckperms.common.calculator.processor.AbstractPermissionProcessor;
|
||||
import me.lucko.luckperms.common.calculator.processor.PermissionProcessor;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
@@ -38,6 +39,8 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
* Permission Processor for Bukkits "child" permission system.
|
||||
*/
|
||||
public class ChildProcessor extends AbstractPermissionProcessor implements PermissionProcessor {
|
||||
private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(ChildProcessor.class);
|
||||
|
||||
private final LPBukkitPlugin plugin;
|
||||
private Map<String, Boolean> childPermissions = Collections.emptyMap();
|
||||
|
||||
@@ -46,8 +49,8 @@ public class ChildProcessor extends AbstractPermissionProcessor implements Permi
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
return Tristate.fromNullableBoolean(this.childPermissions.get(permission));
|
||||
public TristateResult hasPermission(String permission) {
|
||||
return RESULT_FACTORY.result(Tristate.fromNullableBoolean(this.childPermissions.get(permission)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,13 +28,15 @@ package me.lucko.luckperms.bukkit.calculator;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.bukkit.LPBukkitPlugin;
|
||||
import me.lucko.luckperms.common.calculator.processor.PermissionProcessor;
|
||||
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import org.bukkit.permissions.Permission;
|
||||
|
||||
/**
|
||||
* Permission Processor for Bukkits "default" permission system.
|
||||
*/
|
||||
public class DefaultsProcessor implements PermissionProcessor {
|
||||
private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(DefaultsProcessor.class);
|
||||
|
||||
private final LPBukkitPlugin plugin;
|
||||
private final boolean isOp;
|
||||
|
||||
@@ -44,13 +46,16 @@ public class DefaultsProcessor implements PermissionProcessor {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
public TristateResult hasPermission(String permission) {
|
||||
Tristate t = this.plugin.getDefaultPermissionMap().lookupDefaultPermission(permission, this.isOp);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
return RESULT_FACTORY.result(t, "default permission map");
|
||||
}
|
||||
|
||||
Permission defPerm = this.plugin.getPermissionMap().get(permission);
|
||||
return defPerm == null ? Tristate.UNDEFINED : Tristate.fromBoolean(defPerm.getDefault().getValue(this.isOp));
|
||||
if (defPerm == null) {
|
||||
return TristateResult.UNDEFINED;
|
||||
}
|
||||
return RESULT_FACTORY.result(Tristate.fromBoolean(defPerm.getDefault().getValue(this.isOp)), "permission map");
|
||||
}
|
||||
}
|
||||
|
||||
+4
-6
@@ -26,7 +26,6 @@
|
||||
package me.lucko.luckperms.bukkit.inject.permissible;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.bukkit.LPBukkitPlugin;
|
||||
import me.lucko.luckperms.common.config.ConfigKeys;
|
||||
@@ -34,7 +33,6 @@ import me.lucko.luckperms.common.context.ContextsSupplier;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
import me.lucko.luckperms.common.util.ImmutableCollectors;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.permissions.PermissibleBase;
|
||||
import org.bukkit.permissions.Permission;
|
||||
@@ -136,7 +134,7 @@ public class LPPermissible extends PermissibleBase {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK);
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result();
|
||||
return ts != Tristate.UNDEFINED || Permission.DEFAULT_PERMISSION.getValue(isOp());
|
||||
}
|
||||
|
||||
@@ -146,7 +144,7 @@ public class LPPermissible extends PermissibleBase {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK);
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result();
|
||||
if (ts != Tristate.UNDEFINED) {
|
||||
return true;
|
||||
}
|
||||
@@ -164,7 +162,7 @@ public class LPPermissible extends PermissibleBase {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK);
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result();
|
||||
return ts != Tristate.UNDEFINED ? ts.asBoolean() : Permission.DEFAULT_PERMISSION.getValue(isOp());
|
||||
}
|
||||
|
||||
@@ -174,7 +172,7 @@ public class LPPermissible extends PermissibleBase {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK);
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result();
|
||||
if (ts != Tristate.UNDEFINED) {
|
||||
return ts.asBoolean();
|
||||
}
|
||||
|
||||
+2
-2
@@ -28,10 +28,10 @@ package me.lucko.luckperms.bukkit.inject.permissible;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ContextSet;
|
||||
import me.lucko.luckperms.bukkit.inject.dummy.DummyPermissibleBase;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||
import me.lucko.luckperms.common.verbose.VerboseHandler;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
|
||||
import org.bukkit.permissions.PermissibleBase;
|
||||
import org.bukkit.permissions.Permission;
|
||||
import org.bukkit.permissions.PermissionAttachment;
|
||||
@@ -67,7 +67,7 @@ public class MonitoredPermissibleBase extends PermissibleBase {
|
||||
}
|
||||
|
||||
private void logCheck(PermissionCheckEvent.Origin origin, String permission, boolean result) {
|
||||
this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result));
|
||||
this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.name, ContextSet.empty(), permission, TristateResult.of(Tristate.fromBoolean(result)));
|
||||
this.plugin.getPermissionRegistry().offer(permission);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
package me.lucko.luckperms.bukkit.vault;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import me.lucko.luckperms.api.Contexts;
|
||||
import me.lucko.luckperms.api.Node;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
@@ -43,9 +42,7 @@ import me.lucko.luckperms.common.node.factory.NodeFactory;
|
||||
import me.lucko.luckperms.common.util.Uuids;
|
||||
import me.lucko.luckperms.common.verbose.event.MetaCheckEvent;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
|
||||
import net.milkbowl.vault.permission.Permission;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@@ -170,7 +167,7 @@ public class LuckPermsVaultPermission extends AbstractVaultPermission {
|
||||
Contexts contexts = contextForLookup(user, world);
|
||||
PermissionCache permissionData = user.getCachedData().getPermissionData(contexts);
|
||||
|
||||
Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API);
|
||||
Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API).result();
|
||||
if (log()) {
|
||||
logMsg("#userHasPermission: %s - %s - %s - %s", user.getPlainDisplayName(), contexts.getContexts().toMultimap(), permission, result);
|
||||
}
|
||||
@@ -275,7 +272,7 @@ public class LuckPermsVaultPermission extends AbstractVaultPermission {
|
||||
Contexts contexts = contextForLookup(null, world);
|
||||
PermissionCache permissionData = group.getCachedData().getPermissionData(contexts);
|
||||
|
||||
Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API);
|
||||
Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API).result();
|
||||
if (log()) {
|
||||
logMsg("#groupHasPermission: %s - %s - %s - %s", group.getName(), contexts.getContexts().toMultimap(), permission, result);
|
||||
}
|
||||
|
||||
+5
-5
@@ -30,9 +30,9 @@ import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ContextSet;
|
||||
import me.lucko.luckperms.bungee.LPBungeePlugin;
|
||||
import me.lucko.luckperms.bungee.event.TristateCheckEvent;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.config.ConfigKeys;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
import net.md_5.bungee.api.event.PermissionCheckEvent;
|
||||
import net.md_5.bungee.api.plugin.Listener;
|
||||
@@ -66,7 +66,7 @@ public class BungeePermissionCheckListener implements Listener {
|
||||
}
|
||||
|
||||
Contexts contexts = this.plugin.getContextManager().getApplicableContexts(player);
|
||||
Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK);
|
||||
Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result();
|
||||
if (result == Tristate.UNDEFINED && this.plugin.getConfiguration().get(ConfigKeys.APPLY_BUNGEE_CONFIG_PERMISSIONS)) {
|
||||
return; // just use the result provided by the proxy when the event was created
|
||||
}
|
||||
@@ -92,7 +92,7 @@ public class BungeePermissionCheckListener implements Listener {
|
||||
}
|
||||
|
||||
Contexts contexts = this.plugin.getContextManager().getApplicableContexts(player);
|
||||
Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK);
|
||||
Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result();
|
||||
if (result == Tristate.UNDEFINED && this.plugin.getConfiguration().get(ConfigKeys.APPLY_BUNGEE_CONFIG_PERMISSIONS)) {
|
||||
return; // just use the result provided by the proxy when the event was created
|
||||
}
|
||||
@@ -113,7 +113,7 @@ public class BungeePermissionCheckListener implements Listener {
|
||||
Tristate result = Tristate.fromBoolean(e.hasPermission());
|
||||
String name = "internal/" + e.getSender().getName();
|
||||
|
||||
this.plugin.getVerboseHandler().offerPermissionCheckEvent(me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK, name, ContextSet.empty(), permission, result);
|
||||
this.plugin.getVerboseHandler().offerPermissionCheckEvent(me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK, name, ContextSet.empty(), permission, TristateResult.of(result));
|
||||
this.plugin.getPermissionRegistry().offer(permission);
|
||||
}
|
||||
|
||||
@@ -130,7 +130,7 @@ public class BungeePermissionCheckListener implements Listener {
|
||||
Tristate result = e.getResult();
|
||||
String name = "internal/" + e.getSender().getName();
|
||||
|
||||
this.plugin.getVerboseHandler().offerPermissionCheckEvent(me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, result);
|
||||
this.plugin.getVerboseHandler().offerPermissionCheckEvent(me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, TristateResult.of(result));
|
||||
this.plugin.getPermissionRegistry().offer(permission);
|
||||
}
|
||||
}
|
||||
|
||||
+7
-10
@@ -31,8 +31,8 @@ import me.lucko.luckperms.api.caching.PermissionData;
|
||||
import me.lucko.luckperms.common.cacheddata.CacheMetadata;
|
||||
import me.lucko.luckperms.common.calculator.CalculatorFactory;
|
||||
import me.lucko.luckperms.common.calculator.PermissionCalculator;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -102,21 +102,18 @@ public class PermissionCache implements PermissionData {
|
||||
return this.permissionsUnmodifiable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Tristate getPermissionValue(@NonNull String permission) {
|
||||
if (permission == null) {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
return this.calculator.getPermissionValue(permission, PermissionCheckEvent.Origin.LUCKPERMS_API);
|
||||
}
|
||||
|
||||
public Tristate getPermissionValue(String permission, PermissionCheckEvent.Origin origin) {
|
||||
public TristateResult getPermissionValue(String permission, PermissionCheckEvent.Origin origin) {
|
||||
if (permission == null) {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
return this.calculator.getPermissionValue(permission, origin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Tristate getPermissionValue(@NonNull String permission) {
|
||||
return getPermissionValue(permission, PermissionCheckEvent.Origin.LUCKPERMS_API).result();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Contexts getContexts() {
|
||||
return this.contexts;
|
||||
|
||||
+9
-10
@@ -26,14 +26,13 @@
|
||||
package me.lucko.luckperms.common.calculator;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.cacheddata.CacheMetadata;
|
||||
import me.lucko.luckperms.common.calculator.processor.PermissionProcessor;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||
import me.lucko.luckperms.common.util.LoadingMap;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.util.List;
|
||||
@@ -43,7 +42,7 @@ import java.util.function.Function;
|
||||
/**
|
||||
* Calculates and caches permissions
|
||||
*/
|
||||
public class PermissionCalculator implements Function<String, Tristate> {
|
||||
public class PermissionCalculator implements Function<String, TristateResult> {
|
||||
|
||||
/**
|
||||
* The plugin instance
|
||||
@@ -63,7 +62,7 @@ public class PermissionCalculator implements Function<String, Tristate> {
|
||||
/**
|
||||
* Loading cache for permission checks
|
||||
*/
|
||||
private final LoadingMap<String, Tristate> lookupCache = LoadingMap.of(this);
|
||||
private final LoadingMap<String, TristateResult> lookupCache = LoadingMap.of(this);
|
||||
|
||||
public PermissionCalculator(LuckPermsPlugin plugin, CacheMetadata metadata, ImmutableList<PermissionProcessor> processors) {
|
||||
this.plugin = plugin;
|
||||
@@ -80,9 +79,9 @@ public class PermissionCalculator implements Function<String, Tristate> {
|
||||
* @param origin marks where this check originated from
|
||||
* @return the result
|
||||
*/
|
||||
public Tristate getPermissionValue(String permission, PermissionCheckEvent.Origin origin) {
|
||||
public TristateResult getPermissionValue(String permission, PermissionCheckEvent.Origin origin) {
|
||||
// get the result
|
||||
Tristate result = this.lookupCache.get(permission);
|
||||
TristateResult result = this.lookupCache.get(permission);
|
||||
|
||||
// log this permission lookup to the verbose handler
|
||||
this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.metadata.getObjectName(), this.metadata.getContext(), permission, result);
|
||||
@@ -92,7 +91,7 @@ public class PermissionCalculator implements Function<String, Tristate> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tristate apply(@NonNull String permission) {
|
||||
public TristateResult apply(@NonNull String permission) {
|
||||
// convert the permission to lowercase, as all values in the backing map are also lowercase.
|
||||
// this allows fast case insensitive lookups
|
||||
permission = permission.toLowerCase();
|
||||
@@ -103,13 +102,13 @@ public class PermissionCalculator implements Function<String, Tristate> {
|
||||
this.plugin.getPermissionRegistry().offer(permission);
|
||||
|
||||
for (PermissionProcessor processor : this.processors) {
|
||||
Tristate result = processor.hasPermission(permission);
|
||||
if (result != Tristate.UNDEFINED) {
|
||||
TristateResult result = processor.hasPermission(permission);
|
||||
if (result.result() != Tristate.UNDEFINED) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return Tristate.UNDEFINED;
|
||||
return TristateResult.UNDEFINED;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+4
-2
@@ -26,12 +26,14 @@
|
||||
package me.lucko.luckperms.common.calculator.processor;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
|
||||
public class MapProcessor extends AbstractPermissionProcessor implements PermissionProcessor {
|
||||
private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(MapProcessor.class);
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
return Tristate.fromNullableBoolean(this.sourceMap.get(permission));
|
||||
public TristateResult hasPermission(String permission) {
|
||||
return RESULT_FACTORY.result(Tristate.fromNullableBoolean(this.sourceMap.get(permission)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+2
-2
@@ -25,8 +25,8 @@
|
||||
|
||||
package me.lucko.luckperms.common.calculator.processor;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.calculator.PermissionCalculator;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -44,7 +44,7 @@ public interface PermissionProcessor {
|
||||
* @param permission the permission
|
||||
* @return a tristate
|
||||
*/
|
||||
Tristate hasPermission(String permission);
|
||||
TristateResult hasPermission(String permission);
|
||||
|
||||
/**
|
||||
* Sets the source permissions which should be used by this processor
|
||||
|
||||
+6
-4
@@ -26,9 +26,9 @@
|
||||
package me.lucko.luckperms.common.calculator.processor;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.nodetype.types.RegexType;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.node.model.NodeTypes;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -36,17 +36,19 @@ import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class RegexProcessor extends AbstractPermissionProcessor implements PermissionProcessor {
|
||||
private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(RegexProcessor.class);
|
||||
|
||||
private Map<Pattern, Boolean> regexPermissions = Collections.emptyMap();
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
public TristateResult hasPermission(String permission) {
|
||||
for (Map.Entry<Pattern, Boolean> e : this.regexPermissions.entrySet()) {
|
||||
if (e.getKey().matcher(permission).matches()) {
|
||||
return Tristate.fromBoolean(e.getValue());
|
||||
return RESULT_FACTORY.result(Tristate.fromBoolean(e.getValue()), "pattern: " + e.getKey().pattern());
|
||||
}
|
||||
}
|
||||
|
||||
return Tristate.UNDEFINED;
|
||||
return TristateResult.UNDEFINED;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+12
-10
@@ -26,23 +26,25 @@
|
||||
package me.lucko.luckperms.common.calculator.processor;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.node.model.ImmutableNode;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
public class WildcardProcessor extends AbstractPermissionProcessor implements PermissionProcessor {
|
||||
private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(WildcardProcessor.class);
|
||||
|
||||
public static final String WILDCARD_SUFFIX = ".*";
|
||||
private static final String GLOBAL_WILDCARD = "*";
|
||||
private static final String GLOBAL_WILDCARD_WITH_QUOTES = "'*'";
|
||||
private static final String ROOT_WILDCARD = "*";
|
||||
private static final String ROOT_WILDCARD_WITH_QUOTES = "'*'";
|
||||
|
||||
private Map<String, Boolean> wildcardPermissions = Collections.emptyMap();
|
||||
private Tristate globalWildcardState = Tristate.UNDEFINED;
|
||||
private TristateResult rootWildcardState = TristateResult.UNDEFINED;
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
public TristateResult hasPermission(String permission) {
|
||||
String node = permission;
|
||||
|
||||
while (true) {
|
||||
@@ -55,12 +57,12 @@ public class WildcardProcessor extends AbstractPermissionProcessor implements Pe
|
||||
if (!node.isEmpty()) {
|
||||
Tristate t = Tristate.fromNullableBoolean(this.wildcardPermissions.get(node));
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
return RESULT_FACTORY.result(t, "match: " + node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this.globalWildcardState;
|
||||
return this.rootWildcardState;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -76,11 +78,11 @@ public class WildcardProcessor extends AbstractPermissionProcessor implements Pe
|
||||
}
|
||||
this.wildcardPermissions = builder.build();
|
||||
|
||||
Tristate state = Tristate.fromNullableBoolean(this.sourceMap.get(GLOBAL_WILDCARD));
|
||||
Tristate state = Tristate.fromNullableBoolean(this.sourceMap.get(ROOT_WILDCARD));
|
||||
if (state == Tristate.UNDEFINED) {
|
||||
state = Tristate.fromNullableBoolean(this.sourceMap.get(GLOBAL_WILDCARD_WITH_QUOTES));
|
||||
state = Tristate.fromNullableBoolean(this.sourceMap.get(ROOT_WILDCARD_WITH_QUOTES));
|
||||
}
|
||||
|
||||
this.globalWildcardState = state;
|
||||
this.rootWildcardState = RESULT_FACTORY.result(state, "root");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* This file is part of LuckPerms, licensed under the MIT License.
|
||||
*
|
||||
* Copyright (c) lucko (Luck) <luck@lucko.me>
|
||||
* Copyright (c) contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package me.lucko.luckperms.common.calculator.result;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.calculator.PermissionCalculator;
|
||||
import me.lucko.luckperms.common.calculator.processor.PermissionProcessor;
|
||||
|
||||
/**
|
||||
* Represents the result of a {@link PermissionCalculator} lookup.
|
||||
*/
|
||||
public final class TristateResult {
|
||||
|
||||
public static final TristateResult UNDEFINED = new TristateResult(Tristate.UNDEFINED, null, null);
|
||||
|
||||
public static TristateResult of(Tristate result, Class<? extends PermissionProcessor> processorClass, String cause) {
|
||||
if (result == Tristate.UNDEFINED) {
|
||||
return UNDEFINED;
|
||||
}
|
||||
return new TristateResult(result, processorClass, cause);
|
||||
}
|
||||
|
||||
public static TristateResult of(Tristate result, Class<? extends PermissionProcessor> processorClass) {
|
||||
return of(result, processorClass, null);
|
||||
}
|
||||
|
||||
public static TristateResult of(Tristate result) {
|
||||
return of(result, null, null);
|
||||
}
|
||||
|
||||
private final Tristate result;
|
||||
private final Class<? extends PermissionProcessor> processorClass;
|
||||
private final String cause;
|
||||
|
||||
private TristateResult(Tristate result, Class<? extends PermissionProcessor> processorClass, String cause) {
|
||||
this.result = result;
|
||||
this.processorClass = processorClass;
|
||||
this.cause = cause;
|
||||
}
|
||||
|
||||
public Tristate result() {
|
||||
return this.result;
|
||||
}
|
||||
|
||||
public Class<? extends PermissionProcessor> processorClass() {
|
||||
return this.processorClass;
|
||||
}
|
||||
|
||||
public String cause() {
|
||||
return this.cause;
|
||||
}
|
||||
|
||||
public static final class Factory {
|
||||
private final Class<? extends PermissionProcessor> processorClass;
|
||||
|
||||
private final TristateResult trueResult;
|
||||
private final TristateResult falseResult;
|
||||
|
||||
public Factory(Class<? extends PermissionProcessor> processorClass) {
|
||||
this.processorClass = processorClass;
|
||||
|
||||
this.trueResult = of(Tristate.TRUE, processorClass);
|
||||
this.falseResult = of(Tristate.FALSE, processorClass);
|
||||
}
|
||||
|
||||
public TristateResult result(Tristate result) {
|
||||
switch (result) {
|
||||
case TRUE:
|
||||
return this.trueResult;
|
||||
case FALSE:
|
||||
return this.falseResult;
|
||||
case UNDEFINED:
|
||||
return UNDEFINED;
|
||||
default:
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
||||
|
||||
public TristateResult result(Tristate result, String cause) {
|
||||
if (cause == null) {
|
||||
return result(result);
|
||||
}
|
||||
return of(result, this.processorClass, cause);
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -299,7 +299,7 @@ public final class ArgumentPermissions {
|
||||
}
|
||||
|
||||
PermissionCache permissionData = user.getCachedData().getPermissionData(Contexts.of(contextSet, Contexts.global().getSettings()));
|
||||
return !permissionData.getPermissionValue(NodeFactory.groupNode(targetGroupName), PermissionCheckEvent.Origin.INTERNAL).asBoolean();
|
||||
return !permissionData.getPermissionValue(NodeFactory.groupNode(targetGroupName), PermissionCheckEvent.Origin.INTERNAL).result().asBoolean();
|
||||
}
|
||||
|
||||
private ArgumentPermissions() {}
|
||||
|
||||
@@ -70,7 +70,7 @@ public class CheckCommand extends SingleCommand {
|
||||
return CommandResult.STATE_ERROR;
|
||||
}
|
||||
|
||||
Tristate tristate = user.getCachedData().getPermissionData(plugin.getContextForUser(user).orElse(plugin.getContextManager().getStaticContexts())).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL);
|
||||
Tristate tristate = user.getCachedData().getPermissionData(plugin.getContextForUser(user).orElse(plugin.getContextManager().getStaticContexts())).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL).result();
|
||||
Message.CHECK_RESULT.send(sender, user.getFormattedDisplayName(), permission, MessageUtils.formatTristate(tristate));
|
||||
return CommandResult.SUCCESS;
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ package me.lucko.luckperms.common.treeview;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import me.lucko.luckperms.common.cacheddata.type.PermissionCache;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
import me.lucko.luckperms.common.sender.Sender;
|
||||
@@ -151,7 +150,7 @@ public class TreeView {
|
||||
checks = new JObject();
|
||||
for (Map.Entry<Integer, String> node : this.view.getNodeEndings()) {
|
||||
String permission = prefix + node.getValue();
|
||||
checks.add(permission, checker.getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL).name().toLowerCase());
|
||||
checks.add(permission, checker.getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL).result().name().toLowerCase());
|
||||
}
|
||||
} else {
|
||||
checks = null;
|
||||
|
||||
@@ -26,19 +26,17 @@
|
||||
package me.lucko.luckperms.common.verbose;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import me.lucko.luckperms.common.util.Scripting;
|
||||
import me.lucko.luckperms.common.verbose.event.MetaCheckEvent;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
import me.lucko.luckperms.common.verbose.event.VerboseEvent;
|
||||
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptException;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptException;
|
||||
|
||||
/**
|
||||
* Represents a verbose filter expression.
|
||||
*
|
||||
@@ -278,7 +276,7 @@ public final class VerboseFilter {
|
||||
this.value.equals("permission") ||
|
||||
permissionEvent.getCheckTarget().equalsIgnoreCase(this.value) ||
|
||||
permissionEvent.getPermission().toLowerCase().startsWith(this.value.toLowerCase()) ||
|
||||
permissionEvent.getResult().name().equalsIgnoreCase(this.value)
|
||||
permissionEvent.getResult().result().name().equalsIgnoreCase(this.value)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
|
||||
package me.lucko.luckperms.common.verbose;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ContextSet;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.plugin.scheduler.SchedulerAdapter;
|
||||
import me.lucko.luckperms.common.sender.Sender;
|
||||
import me.lucko.luckperms.common.util.RepeatingTask;
|
||||
@@ -73,7 +73,7 @@ public class VerboseHandler extends RepeatingTask {
|
||||
* @param permission the permission which was checked for
|
||||
* @param result the result of the permission check
|
||||
*/
|
||||
public void offerPermissionCheckEvent(PermissionCheckEvent.Origin origin, String checkTarget, ContextSet checkContext, String permission, Tristate result) {
|
||||
public void offerPermissionCheckEvent(PermissionCheckEvent.Origin origin, String checkTarget, ContextSet checkContext, String permission, TristateResult result) {
|
||||
// don't bother even processing the check if there are no listeners registered
|
||||
if (!this.listening) {
|
||||
return;
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
package me.lucko.luckperms.common.verbose;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.command.CommandManager;
|
||||
import me.lucko.luckperms.common.command.utils.MessageUtils;
|
||||
@@ -41,7 +40,6 @@ import me.lucko.luckperms.common.verbose.event.MetaCheckEvent;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
import me.lucko.luckperms.common.verbose.event.VerboseEvent;
|
||||
import me.lucko.luckperms.common.web.Bytebin;
|
||||
|
||||
import net.kyori.text.TextComponent;
|
||||
import net.kyori.text.event.HoverEvent;
|
||||
|
||||
@@ -145,8 +143,8 @@ public class VerboseListener {
|
||||
Message.VERBOSE_LOG_PERMISSION.send(this.notifiedSender,
|
||||
permissionEvent.getCheckTarget(),
|
||||
permissionEvent.getPermission(),
|
||||
getTristateColor(permissionEvent.getResult()),
|
||||
permissionEvent.getResult().name().toLowerCase()
|
||||
getTristateColor(permissionEvent.getResult().result()),
|
||||
permissionEvent.getResult().result().name().toLowerCase()
|
||||
);
|
||||
} else if (event instanceof MetaCheckEvent) {
|
||||
MetaCheckEvent metaEvent = (MetaCheckEvent) event;
|
||||
@@ -169,8 +167,8 @@ public class VerboseListener {
|
||||
textComponent = Message.VERBOSE_LOG_PERMISSION.asComponent(this.notifiedSender.getPlugin().getLocaleManager(),
|
||||
permissionEvent.getCheckTarget(),
|
||||
permissionEvent.getPermission(),
|
||||
getTristateColor(permissionEvent.getResult()),
|
||||
permissionEvent.getResult().name().toLowerCase()
|
||||
getTristateColor(permissionEvent.getResult().result()),
|
||||
permissionEvent.getResult().result().name().toLowerCase()
|
||||
);
|
||||
} else if (event instanceof MetaCheckEvent) {
|
||||
MetaCheckEvent metaEvent = (MetaCheckEvent) event;
|
||||
|
||||
+20
-8
@@ -25,8 +25,8 @@
|
||||
|
||||
package me.lucko.luckperms.common.verbose.event;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.util.gson.JObject;
|
||||
|
||||
public class PermissionCheckEvent extends VerboseEvent {
|
||||
@@ -44,9 +44,9 @@ public class PermissionCheckEvent extends VerboseEvent {
|
||||
/**
|
||||
* The result of the permission check
|
||||
*/
|
||||
private final Tristate result;
|
||||
private final TristateResult result;
|
||||
|
||||
public PermissionCheckEvent(Origin origin, String checkTarget, ImmutableContextSet checkContext, StackTraceElement[] checkTrace, String permission, Tristate result) {
|
||||
public PermissionCheckEvent(Origin origin, String checkTarget, ImmutableContextSet checkContext, StackTraceElement[] checkTrace, String permission, TristateResult result) {
|
||||
super(checkTarget, checkContext, checkTrace);
|
||||
this.origin = origin;
|
||||
this.permission = permission;
|
||||
@@ -61,16 +61,28 @@ public class PermissionCheckEvent extends VerboseEvent {
|
||||
return this.permission;
|
||||
}
|
||||
|
||||
public Tristate getResult() {
|
||||
public TristateResult getResult() {
|
||||
return this.result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void serializeTo(JObject object) {
|
||||
object.add("type", "permission")
|
||||
.add("permission", this.permission)
|
||||
.add("result", this.result.name().toLowerCase())
|
||||
.add("origin", this.origin.name().toLowerCase());
|
||||
object.add("type", "permission");
|
||||
object.add("permission", this.permission);
|
||||
|
||||
object.add("result", this.result.result().name().toLowerCase());
|
||||
if (this.result.processorClass() != null || this.result.cause() != null) {
|
||||
JObject resultInfo = new JObject();
|
||||
if (this.result.processorClass() != null) {
|
||||
resultInfo.add("processorClass", this.result.processorClass().getName());
|
||||
}
|
||||
if (this.result.cause() != null) {
|
||||
resultInfo.add("cause", this.result.cause());
|
||||
}
|
||||
object.add("resultInfo", resultInfo);
|
||||
}
|
||||
|
||||
object.add("origin", this.origin.name().toLowerCase());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -28,6 +28,7 @@ package me.lucko.luckperms.nukkit.calculator;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.calculator.processor.AbstractPermissionProcessor;
|
||||
import me.lucko.luckperms.common.calculator.processor.PermissionProcessor;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.nukkit.LPNukkitPlugin;
|
||||
|
||||
import java.util.Collections;
|
||||
@@ -38,6 +39,8 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
* Permission Processor for Nukkits "child" permission system.
|
||||
*/
|
||||
public class ChildProcessor extends AbstractPermissionProcessor implements PermissionProcessor {
|
||||
private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(ChildProcessor.class);
|
||||
|
||||
private final LPNukkitPlugin plugin;
|
||||
private Map<String, Boolean> childPermissions = Collections.emptyMap();
|
||||
|
||||
@@ -46,8 +49,8 @@ public class ChildProcessor extends AbstractPermissionProcessor implements Permi
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
return Tristate.fromNullableBoolean(this.childPermissions.get(permission));
|
||||
public TristateResult hasPermission(String permission) {
|
||||
return RESULT_FACTORY.result(Tristate.fromNullableBoolean(this.childPermissions.get(permission)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -27,6 +27,7 @@ package me.lucko.luckperms.nukkit.calculator;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.calculator.processor.PermissionProcessor;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.nukkit.LPNukkitPlugin;
|
||||
import me.lucko.luckperms.nukkit.inject.PermissionDefault;
|
||||
|
||||
@@ -34,6 +35,8 @@ import me.lucko.luckperms.nukkit.inject.PermissionDefault;
|
||||
* Permission Processor for Nukkits "default" permission system.
|
||||
*/
|
||||
public class DefaultsProcessor implements PermissionProcessor {
|
||||
private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(DefaultsProcessor.class);
|
||||
|
||||
private final LPNukkitPlugin plugin;
|
||||
private final boolean isOp;
|
||||
|
||||
@@ -43,13 +46,16 @@ public class DefaultsProcessor implements PermissionProcessor {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
public TristateResult hasPermission(String permission) {
|
||||
Tristate t = this.plugin.getDefaultPermissionMap().lookupDefaultPermission(permission, this.isOp);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
return RESULT_FACTORY.result(t, "default permission map");
|
||||
}
|
||||
|
||||
PermissionDefault def = PermissionDefault.fromPermission(this.plugin.getPermissionMap().get(permission));
|
||||
return def == null ? Tristate.UNDEFINED : Tristate.fromBoolean(def.getValue(this.isOp));
|
||||
if (def == null) {
|
||||
return TristateResult.UNDEFINED;
|
||||
}
|
||||
return RESULT_FACTORY.result(Tristate.fromBoolean(def.getValue(this.isOp)), "permission map");
|
||||
}
|
||||
}
|
||||
|
||||
+10
-13
@@ -25,8 +25,13 @@
|
||||
|
||||
package me.lucko.luckperms.nukkit.inject.permissible;
|
||||
|
||||
import cn.nukkit.Player;
|
||||
import cn.nukkit.permission.PermissibleBase;
|
||||
import cn.nukkit.permission.Permission;
|
||||
import cn.nukkit.permission.PermissionAttachment;
|
||||
import cn.nukkit.permission.PermissionAttachmentInfo;
|
||||
import cn.nukkit.plugin.Plugin;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.config.ConfigKeys;
|
||||
import me.lucko.luckperms.common.context.ContextsSupplier;
|
||||
@@ -35,16 +40,8 @@ import me.lucko.luckperms.common.util.ImmutableCollectors;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
import me.lucko.luckperms.nukkit.LPNukkitPlugin;
|
||||
import me.lucko.luckperms.nukkit.inject.PermissionDefault;
|
||||
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import cn.nukkit.Player;
|
||||
import cn.nukkit.permission.PermissibleBase;
|
||||
import cn.nukkit.permission.Permission;
|
||||
import cn.nukkit.permission.PermissionAttachment;
|
||||
import cn.nukkit.permission.PermissionAttachmentInfo;
|
||||
import cn.nukkit.plugin.Plugin;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
@@ -137,7 +134,7 @@ public class LPPermissible extends PermissibleBase {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK);
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result();
|
||||
return ts != Tristate.UNDEFINED || PermissionDefault.OP.getValue(isOp());
|
||||
}
|
||||
|
||||
@@ -147,7 +144,7 @@ public class LPPermissible extends PermissibleBase {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK);
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result();
|
||||
if (ts != Tristate.UNDEFINED) {
|
||||
return true;
|
||||
}
|
||||
@@ -166,7 +163,7 @@ public class LPPermissible extends PermissibleBase {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK);
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result();
|
||||
return ts != Tristate.UNDEFINED ? ts.asBoolean() : PermissionDefault.OP.getValue(isOp());
|
||||
}
|
||||
|
||||
@@ -176,7 +173,7 @@ public class LPPermissible extends PermissibleBase {
|
||||
throw new NullPointerException("permission");
|
||||
}
|
||||
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK);
|
||||
Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result();
|
||||
if (ts != Tristate.UNDEFINED) {
|
||||
return ts.asBoolean();
|
||||
}
|
||||
|
||||
+8
-8
@@ -25,18 +25,18 @@
|
||||
|
||||
package me.lucko.luckperms.nukkit.inject.permissible;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ContextSet;
|
||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||
import me.lucko.luckperms.common.verbose.VerboseHandler;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
import me.lucko.luckperms.nukkit.inject.dummy.DummyPermissibleBase;
|
||||
|
||||
import cn.nukkit.permission.PermissibleBase;
|
||||
import cn.nukkit.permission.Permission;
|
||||
import cn.nukkit.permission.PermissionAttachment;
|
||||
import cn.nukkit.permission.PermissionAttachmentInfo;
|
||||
import cn.nukkit.plugin.Plugin;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ContextSet;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||
import me.lucko.luckperms.common.verbose.VerboseHandler;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
import me.lucko.luckperms.nukkit.inject.dummy.DummyPermissibleBase;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -67,7 +67,7 @@ public class MonitoredPermissibleBase extends PermissibleBase {
|
||||
}
|
||||
|
||||
private void logCheck(PermissionCheckEvent.Origin origin, String permission, boolean result) {
|
||||
this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result));
|
||||
this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.name, ContextSet.empty(), permission, TristateResult.of(Tristate.fromBoolean(result)));
|
||||
this.plugin.getPermissionRegistry().offer(permission);
|
||||
}
|
||||
|
||||
|
||||
@@ -28,10 +28,13 @@ package me.lucko.luckperms.sponge.calculator;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.common.calculator.processor.PermissionProcessor;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.sponge.service.model.LPPermissionService;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
|
||||
public abstract class DefaultsProcessor implements PermissionProcessor {
|
||||
private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(DefaultsProcessor.class);
|
||||
|
||||
protected final LPPermissionService service;
|
||||
private final ImmutableContextSet contexts;
|
||||
|
||||
@@ -43,17 +46,17 @@ public abstract class DefaultsProcessor implements PermissionProcessor {
|
||||
protected abstract LPSubject getTypeDefaults();
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
public TristateResult hasPermission(String permission) {
|
||||
Tristate t = getTypeDefaults().getPermissionValue(this.contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
return RESULT_FACTORY.result(t, "type defaults");
|
||||
}
|
||||
|
||||
t = this.service.getRootDefaults().getPermissionValue(this.contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
return RESULT_FACTORY.result(t, "root defaults");
|
||||
}
|
||||
|
||||
return Tristate.UNDEFINED;
|
||||
return TristateResult.UNDEFINED;
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -28,12 +28,14 @@ package me.lucko.luckperms.sponge.calculator;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.common.calculator.processor.AbstractPermissionProcessor;
|
||||
import me.lucko.luckperms.common.calculator.processor.PermissionProcessor;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.node.model.ImmutableNode;
|
||||
|
||||
public class SpongeWildcardProcessor extends AbstractPermissionProcessor implements PermissionProcessor {
|
||||
private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(SpongeWildcardProcessor.class);
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
public TristateResult hasPermission(String permission) {
|
||||
String node = permission;
|
||||
|
||||
while (true) {
|
||||
@@ -46,12 +48,12 @@ public class SpongeWildcardProcessor extends AbstractPermissionProcessor impleme
|
||||
if (!node.isEmpty()) {
|
||||
Tristate t = Tristate.fromNullableBoolean(this.sourceMap.get(node));
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
return RESULT_FACTORY.result(t, "match: " + node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Tristate.UNDEFINED;
|
||||
return TristateResult.UNDEFINED;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-2
@@ -26,7 +26,6 @@
|
||||
package me.lucko.luckperms.sponge.service.model.calculated;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import me.lucko.luckperms.api.Contexts;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ContextSet;
|
||||
@@ -295,7 +294,7 @@ public abstract class CalculatedSubject implements LPSubject {
|
||||
@Override
|
||||
public Tristate getPermissionValue(ImmutableContextSet contexts, String permission) {
|
||||
Contexts lookupContexts = Contexts.of(contexts, Contexts.global().getSettings());
|
||||
return this.cachedData.getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL);
|
||||
return this.cachedData.getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL).result();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-3
@@ -26,7 +26,6 @@
|
||||
package me.lucko.luckperms.sponge.service.model.permissionholder;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import me.lucko.luckperms.api.Contexts;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
@@ -46,7 +45,6 @@ import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import me.lucko.luckperms.sponge.service.ProxyFactory;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubject;
|
||||
import me.lucko.luckperms.sponge.service.model.LPSubjectReference;
|
||||
|
||||
import org.spongepowered.api.service.permission.PermissionService;
|
||||
import org.spongepowered.api.service.permission.Subject;
|
||||
|
||||
@@ -111,7 +109,7 @@ public abstract class PermissionHolderSubject<T extends PermissionHolder> implem
|
||||
@Override
|
||||
public Tristate getPermissionValue(ImmutableContextSet contexts, String permission) {
|
||||
Contexts lookupContexts = this.plugin.getContextManager().formContexts(contexts);
|
||||
return this.parent.getCachedData().getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK);
|
||||
return this.parent.getCachedData().getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-3
@@ -32,13 +32,12 @@ import com.velocitypowered.api.permission.PermissionFunction;
|
||||
import com.velocitypowered.api.permission.PermissionProvider;
|
||||
import com.velocitypowered.api.permission.PermissionSubject;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ContextSet;
|
||||
import me.lucko.luckperms.common.calculator.result.TristateResult;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
import me.lucko.luckperms.velocity.LPVelocityPlugin;
|
||||
import me.lucko.luckperms.velocity.service.CompatibilityUtil;
|
||||
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class MonitoringPermissionCheckListener {
|
||||
@@ -89,7 +88,7 @@ public class MonitoringPermissionCheckListener {
|
||||
Tristate result = CompatibilityUtil.convertTristate(setting);
|
||||
String name = "internal/" + this.name;
|
||||
|
||||
MonitoringPermissionCheckListener.this.plugin.getVerboseHandler().offerPermissionCheckEvent(PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, result);
|
||||
MonitoringPermissionCheckListener.this.plugin.getVerboseHandler().offerPermissionCheckEvent(PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, TristateResult.of(result));
|
||||
MonitoringPermissionCheckListener.this.plugin.getPermissionRegistry().offer(permission);
|
||||
|
||||
return setting;
|
||||
|
||||
+1
-3
@@ -31,11 +31,9 @@ import com.velocitypowered.api.permission.PermissionProvider;
|
||||
import com.velocitypowered.api.permission.PermissionSubject;
|
||||
import com.velocitypowered.api.permission.Tristate;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
|
||||
import me.lucko.luckperms.common.context.ContextsSupplier;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
|
||||
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class PlayerPermissionProvider implements PermissionProvider, PermissionFunction {
|
||||
@@ -57,6 +55,6 @@ public class PlayerPermissionProvider implements PermissionProvider, PermissionF
|
||||
|
||||
@Override
|
||||
public @NonNull Tristate getPermissionValue(@NonNull String permission) {
|
||||
return CompatibilityUtil.convertTristate(this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK));
|
||||
return CompatibilityUtil.convertTristate(this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user