Implement different comparison methods for /lp search (#917)
This commit is contained in:
parent
7da0c58b76
commit
194b602fd6
@ -33,6 +33,8 @@ import me.lucko.luckperms.api.Track;
|
||||
import me.lucko.luckperms.api.User;
|
||||
import me.lucko.luckperms.api.event.cause.CreationCause;
|
||||
import me.lucko.luckperms.api.event.cause.DeletionCause;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.StandardComparison;
|
||||
import me.lucko.luckperms.common.node.factory.NodeFactory;
|
||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||
import me.lucko.luckperms.common.storage.Storage;
|
||||
@ -148,7 +150,7 @@ public class ApiStorage implements me.lucko.luckperms.api.Storage {
|
||||
@Override
|
||||
public CompletableFuture<List<HeldPermission<UUID>>> getUsersWithPermission(@Nonnull String permission) {
|
||||
Objects.requireNonNull(permission, "permission");
|
||||
return this.handle.getUsersWithPermission(permission).exceptionally(consumeExceptionToNull());
|
||||
return this.handle.getUsersWithPermission(Constraint.of(StandardComparison.EQUAL, permission)).exceptionally(consumeExceptionToNull());
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@ -202,7 +204,7 @@ public class ApiStorage implements me.lucko.luckperms.api.Storage {
|
||||
@Override
|
||||
public CompletableFuture<List<HeldPermission<String>>> getGroupsWithPermission(@Nonnull String permission) {
|
||||
Objects.requireNonNull(permission, "permission");
|
||||
return this.handle.getGroupsWithPermission(permission).exceptionally(consumeExceptionToNull());
|
||||
return this.handle.getGroupsWithPermission(Constraint.of(StandardComparison.EQUAL, permission)).exceptionally(consumeExceptionToNull());
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
|
@ -26,7 +26,7 @@
|
||||
package me.lucko.luckperms.common.bulkupdate;
|
||||
|
||||
import me.lucko.luckperms.common.bulkupdate.action.Action;
|
||||
import me.lucko.luckperms.common.bulkupdate.constraint.Constraint;
|
||||
import me.lucko.luckperms.common.bulkupdate.query.Query;
|
||||
import me.lucko.luckperms.common.node.model.NodeDataContainer;
|
||||
|
||||
import java.util.List;
|
||||
@ -45,12 +45,12 @@ public final class BulkUpdate {
|
||||
private final Action action;
|
||||
|
||||
// a set of constraints which data must match to be acted upon
|
||||
private final List<Constraint> constraints;
|
||||
private final List<Query> queries;
|
||||
|
||||
public BulkUpdate(DataType dataType, Action action, List<Constraint> constraints) {
|
||||
public BulkUpdate(DataType dataType, Action action, List<Query> queries) {
|
||||
this.dataType = dataType;
|
||||
this.action = action;
|
||||
this.constraints = constraints;
|
||||
this.queries = queries;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -60,8 +60,8 @@ public final class BulkUpdate {
|
||||
* @return true if satisfied
|
||||
*/
|
||||
public boolean satisfiesConstraints(NodeDataContainer node) {
|
||||
for (Constraint constraint : this.constraints) {
|
||||
if (!constraint.isSatisfiedBy(node)) {
|
||||
for (Query query : this.queries) {
|
||||
if (!query.isSatisfiedBy(node)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -98,21 +98,21 @@ public final class BulkUpdate {
|
||||
sb.append(this.action.getAsSql());
|
||||
|
||||
// if there are no constraints, just return without a WHERE clause
|
||||
if (this.constraints.isEmpty()) {
|
||||
if (this.queries.isEmpty()) {
|
||||
return sb.append(";").toString();
|
||||
}
|
||||
|
||||
// append constraints
|
||||
sb.append(" WHERE");
|
||||
for (int i = 0; i < this.constraints.size(); i++) {
|
||||
Constraint constraint = this.constraints.get(i);
|
||||
for (int i = 0; i < this.queries.size(); i++) {
|
||||
Query query = this.queries.get(i);
|
||||
|
||||
sb.append(" ");
|
||||
if (i != 0) {
|
||||
sb.append("AND ");
|
||||
}
|
||||
|
||||
sb.append(constraint.getAsSql());
|
||||
sb.append(query.getAsSql());
|
||||
}
|
||||
|
||||
return sb.append(";").toString();
|
||||
@ -147,8 +147,8 @@ public final class BulkUpdate {
|
||||
return this.action;
|
||||
}
|
||||
|
||||
public List<Constraint> getConstraints() {
|
||||
return this.constraints;
|
||||
public List<Query> getQueries() {
|
||||
return this.queries;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -159,12 +159,12 @@ public final class BulkUpdate {
|
||||
|
||||
return Objects.equals(this.getDataType(), that.getDataType()) &&
|
||||
Objects.equals(this.getAction(), that.getAction()) &&
|
||||
Objects.equals(this.getConstraints(), that.getConstraints());
|
||||
Objects.equals(this.getQueries(), that.getQueries());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(getDataType(), getAction(), getConstraints());
|
||||
return Objects.hash(getDataType(), getAction(), getQueries());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -172,6 +172,6 @@ public final class BulkUpdate {
|
||||
return "BulkUpdate(" +
|
||||
"dataType=" + this.getDataType() + ", " +
|
||||
"action=" + this.getAction() + ", " +
|
||||
"constraints=" + this.getConstraints() + ")";
|
||||
"constraints=" + this.getQueries() + ")";
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ package me.lucko.luckperms.common.bulkupdate;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import me.lucko.luckperms.common.bulkupdate.action.Action;
|
||||
import me.lucko.luckperms.common.bulkupdate.constraint.Constraint;
|
||||
import me.lucko.luckperms.common.bulkupdate.query.Query;
|
||||
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
@ -49,7 +49,7 @@ public class BulkUpdateBuilder {
|
||||
private Action action = null;
|
||||
|
||||
// a set of constraints which data must match to be acted upon
|
||||
private final Set<Constraint> constraints = new LinkedHashSet<>();
|
||||
private final Set<Query> queries = new LinkedHashSet<>();
|
||||
|
||||
private BulkUpdateBuilder() {
|
||||
}
|
||||
@ -64,8 +64,8 @@ public class BulkUpdateBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public BulkUpdateBuilder constraint(Constraint constraint) {
|
||||
this.constraints.add(constraint);
|
||||
public BulkUpdateBuilder query(Query query) {
|
||||
this.queries.add(query);
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -74,7 +74,7 @@ public class BulkUpdateBuilder {
|
||||
throw new IllegalStateException("no action specified");
|
||||
}
|
||||
|
||||
return new BulkUpdate(this.dataType, this.action, ImmutableList.copyOf(this.constraints));
|
||||
return new BulkUpdate(this.dataType, this.action, ImmutableList.copyOf(this.queries));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -82,6 +82,6 @@ public class BulkUpdateBuilder {
|
||||
return "BulkUpdateBuilder(" +
|
||||
"dataType=" + this.dataType + ", " +
|
||||
"action=" + this.action + ", " +
|
||||
"constraints=" + this.constraints + ")";
|
||||
"constraints=" + this.queries + ")";
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@
|
||||
package me.lucko.luckperms.common.bulkupdate.action;
|
||||
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.constraint.QueryField;
|
||||
import me.lucko.luckperms.common.bulkupdate.query.QueryField;
|
||||
import me.lucko.luckperms.common.node.model.NodeDataContainer;
|
||||
|
||||
public class UpdateAction implements Action {
|
||||
|
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* 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.bulkupdate.comparisons;
|
||||
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
|
||||
public class Constraint {
|
||||
|
||||
public static Constraint of(Comparison comparison, String expression) {
|
||||
return new Constraint(comparison, expression);
|
||||
}
|
||||
|
||||
// the comparison type being used in this query
|
||||
private final Comparison comparison;
|
||||
|
||||
// the expression being compared against
|
||||
private final String expression;
|
||||
|
||||
private Constraint(Comparison comparison, String expression) {
|
||||
this.comparison = comparison;
|
||||
this.expression = expression;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the given value satisfies this constraint
|
||||
*
|
||||
* @param value the value
|
||||
* @return true if satisfied
|
||||
*/
|
||||
public boolean eval(String value) {
|
||||
return this.comparison.matches(value, this.expression);
|
||||
}
|
||||
|
||||
public String getAsSql(String field) {
|
||||
return field + " " + this.comparison.getAsSql() + " " + BulkUpdate.escapeStringForSql(this.expression);
|
||||
}
|
||||
|
||||
public Comparison getComparison() {
|
||||
return this.comparison;
|
||||
}
|
||||
|
||||
public String getExpression() {
|
||||
return this.expression;
|
||||
}
|
||||
}
|
@ -23,38 +23,33 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package me.lucko.luckperms.common.bulkupdate.constraint;
|
||||
package me.lucko.luckperms.common.bulkupdate.query;
|
||||
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Comparison;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.node.model.NodeDataContainer;
|
||||
|
||||
/**
|
||||
* Represents a query constraint
|
||||
* Represents a query component
|
||||
*/
|
||||
public class Constraint {
|
||||
public class Query {
|
||||
|
||||
public static Constraint of(QueryField field, Comparison comparison, String value) {
|
||||
return new Constraint(field, comparison, value);
|
||||
public static Query of(QueryField field, Constraint constraint) {
|
||||
return new Query(field, constraint);
|
||||
}
|
||||
|
||||
// the field this constraint is comparing against
|
||||
// the field this query is comparing against
|
||||
private final QueryField field;
|
||||
|
||||
// the comparison type being used in this constraint
|
||||
private final Comparison comparison;
|
||||
// the constraint
|
||||
private final Constraint constraint;
|
||||
|
||||
// the expression being compared against
|
||||
private final String value;
|
||||
|
||||
private Constraint(QueryField field, Comparison comparison, String value) {
|
||||
private Query(QueryField field, Constraint constraint) {
|
||||
this.field = field;
|
||||
this.comparison = comparison;
|
||||
this.value = value;
|
||||
this.constraint = constraint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the given node satisfies this constraint
|
||||
* Returns if the given node satisfies this query
|
||||
*
|
||||
* @param node the node
|
||||
* @return true if satisfied
|
||||
@ -62,29 +57,25 @@ public class Constraint {
|
||||
public boolean isSatisfiedBy(NodeDataContainer node) {
|
||||
switch (this.field) {
|
||||
case PERMISSION:
|
||||
return this.comparison.matches(node.getPermission(), this.value);
|
||||
return this.constraint.eval(node.getPermission());
|
||||
case SERVER:
|
||||
return this.comparison.matches(node.getServer(), this.value);
|
||||
return this.constraint.eval(node.getServer());
|
||||
case WORLD:
|
||||
return this.comparison.matches(node.getWorld(), this.value);
|
||||
return this.constraint.eval(node.getWorld());
|
||||
default:
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
public String getAsSql() {
|
||||
return this.field.getSqlName() + " " + this.comparison.getAsSql() + " " + BulkUpdate.escapeStringForSql(this.value);
|
||||
return this.constraint.getAsSql(this.field.getSqlName());
|
||||
}
|
||||
|
||||
public QueryField getField() {
|
||||
return this.field;
|
||||
}
|
||||
|
||||
public Comparison getComparison() {
|
||||
return this.comparison;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
public Constraint getConstraint() {
|
||||
return this.constraint;
|
||||
}
|
||||
}
|
@ -23,7 +23,7 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package me.lucko.luckperms.common.bulkupdate.constraint;
|
||||
package me.lucko.luckperms.common.bulkupdate.query;
|
||||
|
||||
/**
|
||||
* Represents a field being used in an update
|
@ -31,6 +31,8 @@ import com.google.common.collect.Maps;
|
||||
|
||||
import me.lucko.luckperms.api.HeldPermission;
|
||||
import me.lucko.luckperms.api.Node;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.StandardComparison;
|
||||
import me.lucko.luckperms.common.command.CommandManager;
|
||||
import me.lucko.luckperms.common.command.CommandResult;
|
||||
import me.lucko.luckperms.common.command.abstraction.SubCommand;
|
||||
@ -77,13 +79,13 @@ public class GroupListMembers extends SubCommand<Group> {
|
||||
return CommandResult.NO_PERMISSION;
|
||||
}
|
||||
|
||||
String query = NodeFactory.groupNode(group.getName());
|
||||
Constraint constraint = Constraint.of(StandardComparison.EQUAL, NodeFactory.groupNode(group.getName()));
|
||||
int page = ArgumentParser.parseIntOrElse(0, args, 1);
|
||||
|
||||
Message.SEARCH_SEARCHING_MEMBERS.send(sender, group.getName());
|
||||
|
||||
List<HeldPermission<UUID>> matchedUsers = plugin.getStorage().getUsersWithPermission(query).join();
|
||||
List<HeldPermission<String>> matchedGroups = plugin.getStorage().getGroupsWithPermission(query).join();
|
||||
List<HeldPermission<UUID>> matchedUsers = plugin.getStorage().getUsersWithPermission(constraint).join();
|
||||
List<HeldPermission<String>> matchedGroups = plugin.getStorage().getGroupsWithPermission(constraint).join();
|
||||
|
||||
int users = matchedUsers.size();
|
||||
int groups = matchedGroups.size();
|
||||
|
@ -34,9 +34,10 @@ import me.lucko.luckperms.common.bulkupdate.DataType;
|
||||
import me.lucko.luckperms.common.bulkupdate.action.DeleteAction;
|
||||
import me.lucko.luckperms.common.bulkupdate.action.UpdateAction;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Comparison;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.StandardComparison;
|
||||
import me.lucko.luckperms.common.bulkupdate.constraint.Constraint;
|
||||
import me.lucko.luckperms.common.bulkupdate.constraint.QueryField;
|
||||
import me.lucko.luckperms.common.bulkupdate.query.Query;
|
||||
import me.lucko.luckperms.common.bulkupdate.query.QueryField;
|
||||
import me.lucko.luckperms.common.command.CommandResult;
|
||||
import me.lucko.luckperms.common.command.abstraction.CommandException;
|
||||
import me.lucko.luckperms.common.command.abstraction.SingleCommand;
|
||||
@ -141,7 +142,7 @@ public class BulkUpdateCommand extends SingleCommand {
|
||||
}
|
||||
|
||||
String expr = parts[2];
|
||||
bulkUpdateBuilder.constraint(Constraint.of(field, comparison, expr));
|
||||
bulkUpdateBuilder.query(Query.of(field, Constraint.of(comparison, expr)));
|
||||
}
|
||||
|
||||
String id = String.format("%04d", ThreadLocalRandom.current().nextInt(10000));
|
||||
|
@ -31,6 +31,9 @@ import com.google.common.collect.Maps;
|
||||
|
||||
import me.lucko.luckperms.api.HeldPermission;
|
||||
import me.lucko.luckperms.api.Node;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Comparison;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.StandardComparison;
|
||||
import me.lucko.luckperms.common.command.CommandManager;
|
||||
import me.lucko.luckperms.common.command.CommandResult;
|
||||
import me.lucko.luckperms.common.command.abstraction.SingleCommand;
|
||||
@ -66,13 +69,19 @@ import java.util.stream.Collectors;
|
||||
|
||||
public class SearchCommand extends SingleCommand {
|
||||
public SearchCommand(LocaleManager locale) {
|
||||
super(CommandSpec.SEARCH.localize(locale), "Search", CommandPermission.SEARCH, Predicates.notInRange(1, 2));
|
||||
super(CommandSpec.SEARCH.localize(locale), "Search", CommandPermission.SEARCH, Predicates.notInRange(1, 3));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, List<String> args, String label) {
|
||||
String query = args.get(0);
|
||||
int page = ArgumentParser.parseIntOrElse(1, args, 1);
|
||||
Comparison comparison = StandardComparison.parseComparison(args.get(0));
|
||||
if (comparison == null) {
|
||||
comparison = StandardComparison.EQUAL;
|
||||
args.add(0, "==");
|
||||
}
|
||||
|
||||
Constraint query = Constraint.of(comparison, args.get(1));
|
||||
int page = ArgumentParser.parseIntOrElse(2, args, 1);
|
||||
|
||||
Message.SEARCH_SEARCHING.send(sender, query);
|
||||
|
||||
@ -93,11 +102,11 @@ public class SearchCommand extends SingleCommand {
|
||||
}
|
||||
return s;
|
||||
});
|
||||
sendResult(sender, matchedUsers, uuidLookups::get, Message.SEARCH_SHOWING_USERS, HolderType.USER, label, page);
|
||||
sendResult(sender, matchedUsers, uuidLookups::get, Message.SEARCH_SHOWING_USERS, HolderType.USER, label, page, comparison);
|
||||
}
|
||||
|
||||
if (!matchedGroups.isEmpty()) {
|
||||
sendResult(sender, matchedGroups, Function.identity(), Message.SEARCH_SHOWING_GROUPS, HolderType.GROUP, label, page);
|
||||
sendResult(sender, matchedGroups, Function.identity(), Message.SEARCH_SHOWING_GROUPS, HolderType.GROUP, label, page, comparison);
|
||||
}
|
||||
|
||||
return CommandResult.SUCCESS;
|
||||
@ -108,7 +117,7 @@ public class SearchCommand extends SingleCommand {
|
||||
return TabCompletions.getPermissionTabComplete(args, plugin.getPermissionRegistry());
|
||||
}
|
||||
|
||||
private static <T extends Comparable<T>> void sendResult(Sender sender, List<HeldPermission<T>> results, Function<T, String> lookupFunction, Message headerMessage, HolderType holderType, String label, int page) {
|
||||
private static <T extends Comparable<T>> void sendResult(Sender sender, List<HeldPermission<T>> results, Function<T, String> lookupFunction, Message headerMessage, HolderType holderType, String label, int page, Comparison comparison) {
|
||||
results = new ArrayList<>(results);
|
||||
results.sort(HeldPermissionComparator.normal());
|
||||
|
||||
@ -130,7 +139,13 @@ public class SearchCommand extends SingleCommand {
|
||||
headerMessage.send(sender, page, pages.size(), results.size());
|
||||
|
||||
for (Map.Entry<String, HeldPermission<T>> ent : mappedContent) {
|
||||
String s = "&3> &b" + ent.getKey() + " &7- " + (ent.getValue().getValue() ? "&a" : "&c") + ent.getValue().getValue() + getNodeExpiryString(ent.getValue().asNode()) + MessageUtils.getAppendableNodeContextString(ent.getValue().asNode());
|
||||
// only show the permission in the results if the comparison isn't equals
|
||||
String permission = "";
|
||||
if (comparison != StandardComparison.EQUAL) {
|
||||
permission = "&7 - (" + ent.getValue().getPermission() + ")";
|
||||
}
|
||||
|
||||
String s = "&3> &b" + ent.getKey() + permission + "&7 - " + (ent.getValue().getValue() ? "&a" : "&c") + ent.getValue().getValue() + getNodeExpiryString(ent.getValue().asNode()) + MessageUtils.getAppendableNodeContextString(ent.getValue().asNode());
|
||||
TextComponent message = TextUtils.fromLegacy(s, CommandManager.AMPERSAND_CHAR).toBuilder().applyDeep(makeFancy(ent.getKey(), holderType, label, ent.getValue())).build();
|
||||
sender.sendMessage(message);
|
||||
}
|
||||
|
@ -35,6 +35,7 @@ import me.lucko.luckperms.api.event.cause.DeletionCause;
|
||||
import me.lucko.luckperms.common.actionlog.Log;
|
||||
import me.lucko.luckperms.common.api.delegates.model.ApiStorage;
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.model.Group;
|
||||
import me.lucko.luckperms.common.model.Track;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
@ -181,9 +182,9 @@ public class AbstractStorage implements Storage {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<List<HeldPermission<UUID>>> getUsersWithPermission(String permission) {
|
||||
public CompletableFuture<List<HeldPermission<UUID>>> getUsersWithPermission(Constraint constraint) {
|
||||
return makeFuture(() -> {
|
||||
List<HeldPermission<UUID>> result = this.dao.getUsersWithPermission(permission);
|
||||
List<HeldPermission<UUID>> result = this.dao.getUsersWithPermission(constraint);
|
||||
result.removeIf(entry -> entry.asNode().hasExpired());
|
||||
return ImmutableList.copyOf(result);
|
||||
});
|
||||
@ -233,9 +234,9 @@ public class AbstractStorage implements Storage {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CompletableFuture<List<HeldPermission<String>>> getGroupsWithPermission(String permission) {
|
||||
public CompletableFuture<List<HeldPermission<String>>> getGroupsWithPermission(Constraint constraint) {
|
||||
return makeFuture(() -> {
|
||||
List<HeldPermission<String>> result = this.dao.getGroupsWithPermission(permission);
|
||||
List<HeldPermission<String>> result = this.dao.getGroupsWithPermission(constraint);
|
||||
result.removeIf(entry -> entry.asNode().hasExpired());
|
||||
return ImmutableList.copyOf(result);
|
||||
});
|
||||
|
@ -32,6 +32,7 @@ import me.lucko.luckperms.api.event.cause.DeletionCause;
|
||||
import me.lucko.luckperms.common.actionlog.Log;
|
||||
import me.lucko.luckperms.common.api.delegates.model.ApiStorage;
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.model.Group;
|
||||
import me.lucko.luckperms.common.model.Track;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
@ -75,7 +76,7 @@ public interface Storage {
|
||||
|
||||
CompletableFuture<Set<UUID>> getUniqueUsers();
|
||||
|
||||
CompletableFuture<List<HeldPermission<UUID>>> getUsersWithPermission(String permission);
|
||||
CompletableFuture<List<HeldPermission<UUID>>> getUsersWithPermission(Constraint constraint);
|
||||
|
||||
CompletableFuture<Group> createAndLoadGroup(String name, CreationCause cause);
|
||||
|
||||
@ -87,7 +88,7 @@ public interface Storage {
|
||||
|
||||
CompletableFuture<Void> deleteGroup(Group group, DeletionCause cause);
|
||||
|
||||
CompletableFuture<List<HeldPermission<String>>> getGroupsWithPermission(String permission);
|
||||
CompletableFuture<List<HeldPermission<String>>> getGroupsWithPermission(Constraint constraint);
|
||||
|
||||
CompletableFuture<Track> createAndLoadTrack(String name, CreationCause cause);
|
||||
|
||||
|
@ -29,6 +29,7 @@ import me.lucko.luckperms.api.HeldPermission;
|
||||
import me.lucko.luckperms.api.LogEntry;
|
||||
import me.lucko.luckperms.common.actionlog.Log;
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.model.Group;
|
||||
import me.lucko.luckperms.common.model.Track;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
@ -82,7 +83,7 @@ public abstract class AbstractDao {
|
||||
|
||||
public abstract Set<UUID> getUniqueUsers() throws Exception;
|
||||
|
||||
public abstract List<HeldPermission<UUID>> getUsersWithPermission(String permission) throws Exception;
|
||||
public abstract List<HeldPermission<UUID>> getUsersWithPermission(Constraint constraint) throws Exception;
|
||||
|
||||
public abstract Group createAndLoadGroup(String name) throws Exception;
|
||||
|
||||
@ -94,7 +95,7 @@ public abstract class AbstractDao {
|
||||
|
||||
public abstract void deleteGroup(Group group) throws Exception;
|
||||
|
||||
public abstract List<HeldPermission<String>> getGroupsWithPermission(String permission) throws Exception;
|
||||
public abstract List<HeldPermission<String>> getGroupsWithPermission(Constraint constraint) throws Exception;
|
||||
|
||||
public abstract Track createAndLoadTrack(String name) throws Exception;
|
||||
|
||||
|
@ -31,6 +31,7 @@ import me.lucko.luckperms.api.HeldPermission;
|
||||
import me.lucko.luckperms.api.LogEntry;
|
||||
import me.lucko.luckperms.common.actionlog.Log;
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.model.Group;
|
||||
import me.lucko.luckperms.common.model.Track;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
@ -132,8 +133,8 @@ public class SplitStorageDao extends AbstractDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) throws Exception {
|
||||
return this.backing.get(this.types.get(SplitStorageType.USER)).getUsersWithPermission(permission);
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(Constraint constraint) throws Exception {
|
||||
return this.backing.get(this.types.get(SplitStorageType.USER)).getUsersWithPermission(constraint);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -162,8 +163,8 @@ public class SplitStorageDao extends AbstractDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(String permission) throws Exception {
|
||||
return this.backing.get(this.types.get(SplitStorageType.GROUP)).getGroupsWithPermission(permission);
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(Constraint constraint) throws Exception {
|
||||
return this.backing.get(this.types.get(SplitStorageType.GROUP)).getGroupsWithPermission(constraint);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -27,6 +27,7 @@ package me.lucko.luckperms.common.storage.dao.file;
|
||||
|
||||
import me.lucko.luckperms.api.HeldPermission;
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.managers.group.GroupManager;
|
||||
import me.lucko.luckperms.common.managers.track.TrackManager;
|
||||
import me.lucko.luckperms.common.node.model.NodeDataContainer;
|
||||
@ -262,7 +263,7 @@ public class CombinedConfigurateDao extends AbstractConfigurateDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) throws Exception {
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(Constraint constraint) throws Exception {
|
||||
List<HeldPermission<UUID>> held = new ArrayList<>();
|
||||
this.usersLoader.apply(false, true, root -> {
|
||||
for (Map.Entry<Object, ? extends ConfigurationNode> entry : root.getChildrenMap().entrySet()) {
|
||||
@ -272,7 +273,7 @@ public class CombinedConfigurateDao extends AbstractConfigurateDao {
|
||||
|
||||
Set<NodeDataContainer> nodes = readNodes(object);
|
||||
for (NodeDataContainer e : nodes) {
|
||||
if (!e.getPermission().equalsIgnoreCase(permission)) {
|
||||
if (!constraint.eval(e.getPermission())) {
|
||||
continue;
|
||||
}
|
||||
held.add(NodeHeldPermission.of(holder, e));
|
||||
@ -316,7 +317,7 @@ public class CombinedConfigurateDao extends AbstractConfigurateDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(String permission) throws Exception {
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(Constraint constraint) throws Exception {
|
||||
List<HeldPermission<String>> held = new ArrayList<>();
|
||||
this.groupsLoader.apply(false, true, root -> {
|
||||
for (Map.Entry<Object, ? extends ConfigurationNode> entry : root.getChildrenMap().entrySet()) {
|
||||
@ -326,7 +327,7 @@ public class CombinedConfigurateDao extends AbstractConfigurateDao {
|
||||
|
||||
Set<NodeDataContainer> nodes = readNodes(object);
|
||||
for (NodeDataContainer e : nodes) {
|
||||
if (!e.getPermission().equalsIgnoreCase(permission)) {
|
||||
if (!constraint.eval(e.getPermission())) {
|
||||
continue;
|
||||
}
|
||||
held.add(NodeHeldPermission.of(holder, e));
|
||||
|
@ -27,6 +27,7 @@ package me.lucko.luckperms.common.storage.dao.file;
|
||||
|
||||
import me.lucko.luckperms.api.HeldPermission;
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.managers.group.GroupManager;
|
||||
import me.lucko.luckperms.common.managers.track.TrackManager;
|
||||
import me.lucko.luckperms.common.model.User;
|
||||
@ -253,7 +254,7 @@ public class SeparatedConfigurateDao extends AbstractConfigurateDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) throws Exception {
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(Constraint constraint) throws Exception {
|
||||
List<HeldPermission<UUID>> held = new ArrayList<>();
|
||||
try (Stream<Path> stream = Files.list(getDirectory(StorageLocation.USER))) {
|
||||
stream.filter(getFileTypeFilter())
|
||||
@ -265,7 +266,7 @@ public class SeparatedConfigurateDao extends AbstractConfigurateDao {
|
||||
UUID holder = UUID.fromString(fileName.substring(0, fileName.length() - this.fileExtension.length()));
|
||||
Set<NodeDataContainer> nodes = readNodes(object);
|
||||
for (NodeDataContainer e : nodes) {
|
||||
if (!e.getPermission().equalsIgnoreCase(permission)) {
|
||||
if (!constraint.eval(e.getPermission())) {
|
||||
continue;
|
||||
}
|
||||
held.add(NodeHeldPermission.of(holder, e));
|
||||
@ -309,7 +310,7 @@ public class SeparatedConfigurateDao extends AbstractConfigurateDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(String permission) throws Exception {
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(Constraint constraint) throws Exception {
|
||||
List<HeldPermission<String>> held = new ArrayList<>();
|
||||
try (Stream<Path> stream = Files.list(getDirectory(StorageLocation.USER))) {
|
||||
stream.filter(getFileTypeFilter())
|
||||
@ -321,7 +322,7 @@ public class SeparatedConfigurateDao extends AbstractConfigurateDao {
|
||||
String holder = fileName.substring(0, fileName.length() - this.fileExtension.length());
|
||||
Set<NodeDataContainer> nodes = readNodes(object);
|
||||
for (NodeDataContainer e : nodes) {
|
||||
if (!e.getPermission().equalsIgnoreCase(permission)) {
|
||||
if (!constraint.eval(e.getPermission())) {
|
||||
continue;
|
||||
}
|
||||
held.add(NodeHeldPermission.of(holder, e));
|
||||
|
@ -46,6 +46,7 @@ import me.lucko.luckperms.api.context.MutableContextSet;
|
||||
import me.lucko.luckperms.common.actionlog.ExtendedLogEntry;
|
||||
import me.lucko.luckperms.common.actionlog.Log;
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.managers.group.GroupManager;
|
||||
import me.lucko.luckperms.common.managers.track.TrackManager;
|
||||
import me.lucko.luckperms.common.model.Group;
|
||||
@ -319,7 +320,7 @@ public class MongoDao extends AbstractDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) {
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(Constraint constraint) {
|
||||
List<HeldPermission<UUID>> held = new ArrayList<>();
|
||||
MongoCollection<Document> c = this.database.getCollection(this.prefix + "users");
|
||||
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
||||
@ -329,7 +330,7 @@ public class MongoDao extends AbstractDao {
|
||||
|
||||
Set<NodeDataContainer> nodes = new HashSet<>(nodesFromDoc(d));
|
||||
for (NodeDataContainer e : nodes) {
|
||||
if (!e.getPermission().equalsIgnoreCase(permission)) {
|
||||
if (!constraint.eval(e.getPermission())) {
|
||||
continue;
|
||||
}
|
||||
held.add(NodeHeldPermission.of(holder, e));
|
||||
@ -446,7 +447,7 @@ public class MongoDao extends AbstractDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(String permission) {
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(Constraint constraint) {
|
||||
List<HeldPermission<String>> held = new ArrayList<>();
|
||||
MongoCollection<Document> c = this.database.getCollection(this.prefix + "groups");
|
||||
try (MongoCursor<Document> cursor = c.find().iterator()) {
|
||||
@ -456,7 +457,7 @@ public class MongoDao extends AbstractDao {
|
||||
String holder = d.getString("_id");
|
||||
Set<NodeDataContainer> nodes = new HashSet<>(nodesFromDoc(d));
|
||||
for (NodeDataContainer e : nodes) {
|
||||
if (!e.getPermission().equalsIgnoreCase(permission)) {
|
||||
if (!constraint.eval(e.getPermission())) {
|
||||
continue;
|
||||
}
|
||||
held.add(NodeHeldPermission.of(holder, e));
|
||||
|
@ -35,6 +35,7 @@ import me.lucko.luckperms.api.Node;
|
||||
import me.lucko.luckperms.common.actionlog.ExtendedLogEntry;
|
||||
import me.lucko.luckperms.common.actionlog.Log;
|
||||
import me.lucko.luckperms.common.bulkupdate.BulkUpdate;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.contexts.ContextSetJsonSerializer;
|
||||
import me.lucko.luckperms.common.managers.group.GroupManager;
|
||||
import me.lucko.luckperms.common.managers.track.TrackManager;
|
||||
@ -81,7 +82,7 @@ public class SqlDao extends AbstractDao {
|
||||
private static final String USER_PERMISSIONS_DELETE = "DELETE FROM {prefix}user_permissions WHERE uuid=?";
|
||||
private static final String USER_PERMISSIONS_INSERT = "INSERT INTO {prefix}user_permissions(uuid, permission, value, server, world, expiry, contexts) VALUES(?, ?, ?, ?, ?, ?, ?)";
|
||||
private static final String USER_PERMISSIONS_SELECT_DISTINCT = "SELECT DISTINCT uuid FROM {prefix}user_permissions";
|
||||
private static final String USER_PERMISSIONS_SELECT_PERMISSION = "SELECT uuid, value, server, world, expiry, contexts FROM {prefix}user_permissions WHERE permission=?";
|
||||
private static final String USER_PERMISSIONS_SELECT_PERMISSION = "SELECT uuid, permission, value, server, world, expiry, contexts FROM {prefix}user_permissions WHERE";
|
||||
|
||||
private static final String PLAYER_SELECT_UUID_BY_USERNAME = "SELECT uuid FROM {prefix}players WHERE username=? LIMIT 1";
|
||||
private static final String PLAYER_SELECT_USERNAME_BY_UUID = "SELECT username FROM {prefix}players WHERE uuid=? LIMIT 1";
|
||||
@ -97,7 +98,7 @@ public class SqlDao extends AbstractDao {
|
||||
private static final String GROUP_PERMISSIONS_DELETE = "DELETE FROM {prefix}group_permissions WHERE name=?";
|
||||
private static final String GROUP_PERMISSIONS_DELETE_SPECIFIC = "DELETE FROM {prefix}group_permissions WHERE name=? AND permission=? AND value=? AND server=? AND world=? AND expiry=? AND contexts=?";
|
||||
private static final String GROUP_PERMISSIONS_INSERT = "INSERT INTO {prefix}group_permissions(name, permission, value, server, world, expiry, contexts) VALUES(?, ?, ?, ?, ?, ?, ?)";
|
||||
private static final String GROUP_PERMISSIONS_SELECT_PERMISSION = "SELECT name, value, server, world, expiry, contexts FROM {prefix}group_permissions WHERE permission=?";
|
||||
private static final String GROUP_PERMISSIONS_SELECT_PERMISSION = "SELECT name, permission, value, server, world, expiry, contexts FROM {prefix}group_permissions WHERE";
|
||||
|
||||
private static final String GROUP_SELECT_ALL = "SELECT name FROM {prefix}groups";
|
||||
private static final String MYSQL_GROUP_INSERT = "INSERT INTO {prefix}groups (name) VALUES(?) ON DUPLICATE KEY UPDATE name=name";
|
||||
@ -493,21 +494,21 @@ public class SqlDao extends AbstractDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(String permission) throws SQLException {
|
||||
public List<HeldPermission<UUID>> getUsersWithPermission(Constraint constraint) throws SQLException {
|
||||
List<HeldPermission<UUID>> held = new ArrayList<>();
|
||||
try (Connection c = this.provider.getConnection()) {
|
||||
try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(USER_PERMISSIONS_SELECT_PERMISSION))) {
|
||||
ps.setString(1, permission);
|
||||
try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(USER_PERMISSIONS_SELECT_PERMISSION + constraint.getAsSql("permission")))) {
|
||||
try (ResultSet rs = ps.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
UUID holder = UUID.fromString(rs.getString("uuid"));
|
||||
String perm = rs.getString("permission");
|
||||
boolean value = rs.getBoolean("value");
|
||||
String server = rs.getString("server");
|
||||
String world = rs.getString("world");
|
||||
long expiry = rs.getLong("expiry");
|
||||
String contexts = rs.getString("contexts");
|
||||
|
||||
NodeDataContainer data = deserializeNode(permission, value, server, world, expiry, contexts);
|
||||
NodeDataContainer data = deserializeNode(perm, value, server, world, expiry, contexts);
|
||||
held.add(NodeHeldPermission.of(holder, data));
|
||||
}
|
||||
}
|
||||
@ -737,21 +738,21 @@ public class SqlDao extends AbstractDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(String permission) throws SQLException {
|
||||
public List<HeldPermission<String>> getGroupsWithPermission(Constraint constraint) throws SQLException {
|
||||
List<HeldPermission<String>> held = new ArrayList<>();
|
||||
try (Connection c = this.provider.getConnection()) {
|
||||
try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(GROUP_PERMISSIONS_SELECT_PERMISSION))) {
|
||||
ps.setString(1, permission);
|
||||
try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(GROUP_PERMISSIONS_SELECT_PERMISSION + constraint.getAsSql("permission")))) {
|
||||
try (ResultSet rs = ps.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
String holder = rs.getString("name");
|
||||
String perm = rs.getString("permission");
|
||||
boolean value = rs.getBoolean("value");
|
||||
String server = rs.getString("server");
|
||||
String world = rs.getString("world");
|
||||
long expiry = rs.getLong("expiry");
|
||||
String contexts = rs.getString("contexts");
|
||||
|
||||
NodeDataContainer data = deserializeNode(permission, value, server, world, expiry, contexts);
|
||||
NodeDataContainer data = deserializeNode(perm, value, server, world, expiry, contexts);
|
||||
held.add(NodeHeldPermission.of(holder, data));
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,8 @@ import me.lucko.luckperms.api.HeldPermission;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.api.event.cause.CreationCause;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.StandardComparison;
|
||||
import me.lucko.luckperms.common.managers.group.AbstractGroupManager;
|
||||
import me.lucko.luckperms.common.storage.DataConstraints;
|
||||
import me.lucko.luckperms.common.utils.ImmutableCollectors;
|
||||
@ -187,7 +189,7 @@ public class SpongeGroupManager extends AbstractGroupManager<SpongeGroup> implem
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableMap.Builder<LPSubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
|
||||
List<HeldPermission<String>> lookup = this.plugin.getStorage().getGroupsWithPermission(permission).join();
|
||||
List<HeldPermission<String>> lookup = this.plugin.getStorage().getGroupsWithPermission(Constraint.of(StandardComparison.EQUAL, permission)).join();
|
||||
for (HeldPermission<String> holder : lookup) {
|
||||
if (holder.asNode().getFullContexts().equals(ImmutableContextSet.empty())) {
|
||||
ret.put(getService().getReferenceFactory().obtain(getIdentifier(), holder.getHolder()), holder.getValue());
|
||||
@ -203,7 +205,7 @@ public class SpongeGroupManager extends AbstractGroupManager<SpongeGroup> implem
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableMap.Builder<LPSubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
|
||||
List<HeldPermission<String>> lookup = this.plugin.getStorage().getGroupsWithPermission(permission).join();
|
||||
List<HeldPermission<String>> lookup = this.plugin.getStorage().getGroupsWithPermission(Constraint.of(StandardComparison.EQUAL, permission)).join();
|
||||
for (HeldPermission<String> holder : lookup) {
|
||||
if (holder.asNode().getFullContexts().equals(contexts)) {
|
||||
ret.put(getService().getReferenceFactory().obtain(getIdentifier(), holder.getHolder()), holder.getValue());
|
||||
|
@ -35,6 +35,8 @@ import com.google.common.collect.Maps;
|
||||
import me.lucko.luckperms.api.HeldPermission;
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint;
|
||||
import me.lucko.luckperms.common.bulkupdate.comparisons.StandardComparison;
|
||||
import me.lucko.luckperms.common.managers.user.AbstractUserManager;
|
||||
import me.lucko.luckperms.common.managers.user.UserHousekeeper;
|
||||
import me.lucko.luckperms.common.model.UserIdentifier;
|
||||
@ -212,7 +214,7 @@ public class SpongeUserManager extends AbstractUserManager<SpongeUser> implement
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableMap.Builder<LPSubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
|
||||
List<HeldPermission<UUID>> lookup = this.plugin.getStorage().getUsersWithPermission(permission).join();
|
||||
List<HeldPermission<UUID>> lookup = this.plugin.getStorage().getUsersWithPermission(Constraint.of(StandardComparison.EQUAL, permission)).join();
|
||||
for (HeldPermission<UUID> holder : lookup) {
|
||||
if (holder.asNode().getFullContexts().equals(ImmutableContextSet.empty())) {
|
||||
ret.put(getService().getReferenceFactory().obtain(getIdentifier(), holder.getHolder().toString()), holder.getValue());
|
||||
@ -228,7 +230,7 @@ public class SpongeUserManager extends AbstractUserManager<SpongeUser> implement
|
||||
return CompletableFuture.supplyAsync(() -> {
|
||||
ImmutableMap.Builder<LPSubjectReference, Boolean> ret = ImmutableMap.builder();
|
||||
|
||||
List<HeldPermission<UUID>> lookup = this.plugin.getStorage().getUsersWithPermission(permission).join();
|
||||
List<HeldPermission<UUID>> lookup = this.plugin.getStorage().getUsersWithPermission(Constraint.of(StandardComparison.EQUAL, permission)).join();
|
||||
for (HeldPermission<UUID> holder : lookup) {
|
||||
if (holder.asNode().getFullContexts().equals(contexts)) {
|
||||
ret.put(getService().getReferenceFactory().obtain(getIdentifier(), holder.getHolder().toString()), holder.getValue());
|
||||
|
Loading…
Reference in New Issue
Block a user