Cleanup permission calculation

This commit is contained in:
Luck
2016-10-18 20:48:59 +01:00
Unverified
parent 7b655d12df
commit d113a92ce5
12 changed files with 181 additions and 131 deletions
@@ -41,12 +41,12 @@ public class DefaultsProcessor implements PermissionProcessor {
public me.lucko.luckperms.api.Tristate hasPermission(String permission) {
Tristate t = service.getUserSubjects().getDefaults().getPermissionValue(contexts, permission);
if (t != Tristate.UNDEFINED) {
return convertTristate(Tristate.fromBoolean(t.asBoolean()));
return convertTristate(t);
}
Tristate t2 = service.getDefaults().getPermissionValue(contexts, permission);
if (t2 != Tristate.UNDEFINED) {
return convertTristate(Tristate.fromBoolean(t.asBoolean()));
return convertTristate(t);
}
return me.lucko.luckperms.api.Tristate.UNDEFINED;
@@ -24,6 +24,7 @@ package me.lucko.luckperms.sponge.calculators;
import lombok.AllArgsConstructor;
import lombok.Getter;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.common.calculators.PermissionProcessor;
import java.util.Map;
@@ -35,46 +36,24 @@ public class SpongeWildcardProcessor implements PermissionProcessor {
private final Map<String, Boolean> map;
@Override
public me.lucko.luckperms.api.Tristate hasPermission(String permission) {
public Tristate hasPermission(String permission) {
String node = permission;
while (node.contains(".")) {
while (true) {
int endIndex = node.lastIndexOf('.');
if (endIndex == -1) {
break;
}
node = node.substring(0, endIndex);
if (!isEmpty(node)) {
if (map.containsKey(node)) {
return me.lucko.luckperms.api.Tristate.fromBoolean(map.get(node));
if (!node.isEmpty()) {
Boolean b = map.get(node);
if (b != null) {
return Tristate.fromBoolean(b);
}
}
}
if (map.containsKey("'*'")) {
return me.lucko.luckperms.api.Tristate.fromBoolean(map.get("'*'"));
}
if (map.containsKey("*")) {
return me.lucko.luckperms.api.Tristate.fromBoolean(map.get("*"));
}
return me.lucko.luckperms.api.Tristate.UNDEFINED;
}
private static boolean isEmpty(String s) {
if (s.equals("")) {
return true;
}
char[] chars = s.toCharArray();
for (char c : chars) {
if (c != '.') {
return false;
}
}
return true;
return Tristate.UNDEFINED;
}
}
@@ -24,12 +24,12 @@ package me.lucko.luckperms.sponge.contexts;
import lombok.AllArgsConstructor;
import me.lucko.luckperms.api.context.ContextCalculator;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@AllArgsConstructor
public class SpongeCalculatorLink extends ContextCalculator<Subject> {
@@ -37,10 +37,11 @@ public class SpongeCalculatorLink extends ContextCalculator<Subject> {
@Override
public Map<String, String> giveApplicableContext(Subject subject, Map<String, String> accumulator) {
Set<Context> contexts = accumulator.entrySet().stream().map(e -> new Context(e.getKey(), e.getValue())).collect(Collectors.toSet());
Set<Context> contexts = LuckPermsService.convertContexts(accumulator);
calculator.accumulateContexts(subject, contexts);
contexts.forEach(c -> accumulator.put(c.getKey(), c.getValue()));
accumulator.clear();
accumulator.putAll(LuckPermsService.convertContexts(contexts));
return accumulator;
}