Supports for permissions range (like essentials.home.limit.<number>)
This commit is contained in:
parent
f8f6b3151b
commit
ca8e244dae
@ -3,7 +3,9 @@ package fr.pandacube.lib.core.permissions;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.OptionalLong;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.LongStream;
|
||||||
|
|
||||||
import fr.pandacube.lib.core.chat.ChatUtil.DisplayTreeNode;
|
import fr.pandacube.lib.core.chat.ChatUtil.DisplayTreeNode;
|
||||||
import fr.pandacube.lib.core.permissions.PermissionsCachedBackendReader.CachedEntity;
|
import fr.pandacube.lib.core.permissions.PermissionsCachedBackendReader.CachedEntity;
|
||||||
@ -91,6 +93,49 @@ public abstract class PermEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public LongStream getPermissionRangeValues(String permissionPrefix) {
|
||||||
|
return getPermissionRangeValues(permissionPrefix, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LongStream getPermissionRangeValues(String permissionPrefix, String server) {
|
||||||
|
return getPermissionRangeValues(permissionPrefix, server, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LongStream getPermissionRangeValues(String permissionPrefix, String server, String world) {
|
||||||
|
String prefixWithEndingDot = permissionPrefix.endsWith(".") ? permissionPrefix : (permissionPrefix + ".");
|
||||||
|
int prefixLength = prefixWithEndingDot.length();
|
||||||
|
return listEffectivePermissions(server, world).entrySet().stream()
|
||||||
|
.filter(e -> e.getValue()) // permission must be positive
|
||||||
|
.map(e -> e.getKey()) // keep only the permission node (key), since the value is always true
|
||||||
|
.filter(p -> p.startsWith(prefixWithEndingDot)) // keep only relevant permissions
|
||||||
|
.map(p -> p.substring(prefixLength)) // keep only what is after the prefix
|
||||||
|
.map(suffix -> { // convert to long
|
||||||
|
try {
|
||||||
|
return Long.parseLong(suffix);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.filter(longSuffix -> longSuffix != null)
|
||||||
|
.mapToLong(longSuffix -> longSuffix)
|
||||||
|
.sorted();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public OptionalLong getPermissionRangeMax(String permissionPrefix) {
|
||||||
|
return getPermissionRangeMax(permissionPrefix, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public OptionalLong getPermissionRangeMax(String permissionPrefix, String server) {
|
||||||
|
return getPermissionRangeMax(permissionPrefix, server, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public OptionalLong getPermissionRangeMax(String permissionPrefix, String server, String world) {
|
||||||
|
return getPermissionRangeValues(permissionPrefix, server, world).max();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public Boolean hasPermission(String permission) {
|
public Boolean hasPermission(String permission) {
|
||||||
return hasPermission(permission, null, null);
|
return hasPermission(permission, null, null);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package fr.pandacube.lib.core.players;
|
package fr.pandacube.lib.core.players;
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
import java.util.OptionalLong;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.stream.LongStream;
|
||||||
|
|
||||||
import fr.pandacube.lib.core.chat.ChatColorUtil;
|
import fr.pandacube.lib.core.chat.ChatColorUtil;
|
||||||
import fr.pandacube.lib.core.db.DBException;
|
import fr.pandacube.lib.core.db.DBException;
|
||||||
@ -158,8 +160,7 @@ public interface IOffPlayer {
|
|||||||
return online.hasPermission(permission);
|
return online.hasPermission(permission);
|
||||||
|
|
||||||
// at this point, the player is offline
|
// at this point, the player is offline
|
||||||
Boolean res = getPermissionUser().hasPermission(permission);
|
return getPermissionUser().hasPermissionOr(permission, null, null, false);
|
||||||
return res != null ? res : false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -183,6 +184,42 @@ public interface IOffPlayer {
|
|||||||
return getPermissionUser().hasPermissionExpression(permissionExpression, null, null);
|
return getPermissionUser().hasPermissionExpression(permissionExpression, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all the values for a set of permission indicating an integer in a range.
|
||||||
|
* <p>
|
||||||
|
* A permission range is used to easily attribute a number to a group or player,
|
||||||
|
* like the maximum number of homes allowed. For instance, if the player has the permission
|
||||||
|
* {@code essentials.home.12}, this method would return a stream containing the value 12,
|
||||||
|
* if the parameter {@code permissionPrefix} is {@code "essentials.home."}.
|
||||||
|
* <p>
|
||||||
|
* The use of a stream allow the caller to get either the maximum, the minimum, or do any
|
||||||
|
* other treatment to the values.
|
||||||
|
* @param permissionPrefix the permission prefix to search for.
|
||||||
|
* @return a LongStream containing all the values found for the specified permission prefix.
|
||||||
|
*/
|
||||||
|
public default LongStream getPermissionRangeValues(String permissionPrefix) {
|
||||||
|
IOnlinePlayer online = getOnlineInstance();
|
||||||
|
|
||||||
|
if (online != null)
|
||||||
|
return online.getPermissionRangeValues(permissionPrefix);
|
||||||
|
|
||||||
|
// at this point, the player is offline
|
||||||
|
return getPermissionUser().getPermissionRangeValues(permissionPrefix, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the maximum value returned by {@link IOffPlayer#getPermissionRangeValues(String)}.
|
||||||
|
*/
|
||||||
|
public default OptionalLong getPermissionRangeMax(String permissionPrefix) {
|
||||||
|
IOnlinePlayer online = getOnlineInstance();
|
||||||
|
|
||||||
|
if (online != null)
|
||||||
|
return online.getPermissionRangeMax(permissionPrefix);
|
||||||
|
|
||||||
|
// at this point, the player is offline
|
||||||
|
return getPermissionUser().getPermissionRangeMax(permissionPrefix, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells if the this player is part of the specified group
|
* Tells if the this player is part of the specified group
|
||||||
*
|
*
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package fr.pandacube.lib.core.players;
|
package fr.pandacube.lib.core.players;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.OptionalLong;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.stream.LongStream;
|
||||||
|
|
||||||
import org.geysermc.floodgate.api.FloodgateApi;
|
import org.geysermc.floodgate.api.FloodgateApi;
|
||||||
import org.geysermc.floodgate.api.player.FloodgatePlayer;
|
import org.geysermc.floodgate.api.player.FloodgatePlayer;
|
||||||
@ -101,6 +103,26 @@ public interface IOnlinePlayer extends IOffPlayer {
|
|||||||
*/
|
*/
|
||||||
public abstract boolean hasPermissionExpression(String permission);
|
public abstract boolean hasPermissionExpression(String permission);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all the values for a set of permission indicating an integer in a range.
|
||||||
|
* <p>
|
||||||
|
* A permission range is used to easily attribute a number to a group or player,
|
||||||
|
* like the maximum number of homes allowed. For instance, if the player has the permission
|
||||||
|
* {@code essentials.home.12}, this method would return a stream containing the value 12,
|
||||||
|
* if the parameter {@code permissionPrefix} is {@code "essentials.home."}.
|
||||||
|
* <p>
|
||||||
|
* The use of a stream allow the caller to get either the maximum, the minimum, or do any
|
||||||
|
* other treatment to the values.
|
||||||
|
* @param permissionPrefix the permission prefix to search for.
|
||||||
|
* @return a LongStream containing all the values found for the specified permission prefix.
|
||||||
|
*/
|
||||||
|
public abstract LongStream getPermissionRangeValues(String permissionPrefix);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the maximum value returned by {@link IOffPlayer#getPermissionRangeValues(String)}.
|
||||||
|
*/
|
||||||
|
public abstract OptionalLong getPermissionRangeMax(String permissionPrefix);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user