Return more detailed information about exactly how a permission check result was determined

This commit is contained in:
Luck
2019-01-31 00:45:56 +00:00
Unverified
parent 83db00aef8
commit f6c0794691
30 changed files with 257 additions and 131 deletions
@@ -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;
}
}
@@ -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;
}
}
@@ -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
@@ -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