From b7f8ca66588c440a97a34a35bf52713d42fd00b2 Mon Sep 17 00:00:00 2001 From: Luck Date: Wed, 5 Sep 2018 15:49:29 +0100 Subject: [PATCH] Add 'require-sender-group-membership-to-modify' config option (#1140) --- bukkit/src/main/resources/config.yml | 5 ++ bungee/src/main/resources/config.yml | 5 ++ .../command/access/ArgumentPermissions.java | 48 +++++++++++++++++++ .../generic/meta/MetaAddChatMeta.java | 3 +- .../generic/meta/MetaAddTempChatMeta.java | 3 +- .../commands/generic/meta/MetaClear.java | 3 +- .../generic/meta/MetaRemoveChatMeta.java | 3 +- .../generic/meta/MetaRemoveTempChatMeta.java | 3 +- .../common/commands/generic/meta/MetaSet.java | 9 ++-- .../generic/meta/MetaSetChatMeta.java | 3 +- .../commands/generic/meta/MetaSetTemp.java | 9 ++-- .../generic/meta/MetaSetTempChatMeta.java | 3 +- .../commands/generic/meta/MetaUnset.java | 9 ++-- .../commands/generic/meta/MetaUnsetTemp.java | 9 ++-- .../commands/generic/other/HolderClear.java | 3 +- .../commands/generic/other/HolderEditor.java | 3 +- .../commands/generic/parent/ParentAdd.java | 10 ++-- .../generic/parent/ParentAddTemp.java | 10 ++-- .../commands/generic/parent/ParentClear.java | 2 +- .../generic/parent/ParentClearTrack.java | 9 ++-- .../commands/generic/parent/ParentRemove.java | 10 ++-- .../generic/parent/ParentRemoveTemp.java | 10 ++-- .../commands/generic/parent/ParentSet.java | 10 ++-- .../generic/parent/ParentSetTrack.java | 10 ++-- .../parent/UserSwitchPrimaryGroup.java | 9 ++++ .../generic/permission/PermissionClear.java | 3 +- .../generic/permission/PermissionSet.java | 15 ++++-- .../generic/permission/PermissionSetTemp.java | 15 ++++-- .../generic/permission/PermissionUnset.java | 15 ++++-- .../permission/PermissionUnsetTemp.java | 15 ++++-- .../common/commands/user/UserDemote.java | 7 ++- .../common/commands/user/UserPromote.java | 7 ++- .../luckperms/common/config/ConfigKeys.java | 6 +++ nukkit/src/main/resources/config.yml | 5 ++ sponge/src/main/resources/luckperms.conf | 5 ++ velocity/src/main/resources/config.yml | 5 ++ 36 files changed, 204 insertions(+), 95 deletions(-) diff --git a/bukkit/src/main/resources/config.yml b/bukkit/src/main/resources/config.yml index fd0f92fe..878936f6 100644 --- a/bukkit/src/main/resources/config.yml +++ b/bukkit/src/main/resources/config.yml @@ -281,6 +281,11 @@ primary-group-calculation: parents-by-weight # the arguments given within the command. argument-based-command-permissions: false +# If the plugin should check whether senders are a member of a given group before they're able to +# edit the groups data or add/remove other users to/from it. +# Note: these limitations do not apply to the web editor! +require-sender-group-membership-to-modify: false + # If the plugin should send log notifications to users whenever permissions are modified. # # - Notifications are only sent to those with the appropriate permission to receive them diff --git a/bungee/src/main/resources/config.yml b/bungee/src/main/resources/config.yml index ddf0b146..3955fb53 100644 --- a/bungee/src/main/resources/config.yml +++ b/bungee/src/main/resources/config.yml @@ -289,6 +289,11 @@ primary-group-calculation: parents-by-weight # the arguments given within the command. argument-based-command-permissions: false +# If the plugin should check whether senders are a member of a given group before they're able to +# edit the groups data or add/remove other users to/from it. +# Note: these limitations do not apply to the web editor! +require-sender-group-membership-to-modify: false + # If the plugin should send log notifications to users whenever permissions are modified. # # - Notifications are only sent to those with the appropriate permission to receive them diff --git a/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java b/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java index 5323d615..aa507d81 100644 --- a/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java +++ b/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java @@ -25,14 +25,19 @@ package me.lucko.luckperms.common.command.access; +import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ContextSet; +import me.lucko.luckperms.common.caching.type.PermissionCache; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.model.Group; +import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.model.Track; import me.lucko.luckperms.common.model.User; +import me.lucko.luckperms.common.node.factory.NodeFactory; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; +import me.lucko.luckperms.common.verbose.CheckOrigin; import java.util.Map; import java.util.function.BiFunction; @@ -254,6 +259,49 @@ public final class ArgumentPermissions { return false; } + /** + * Checks if the sender has permission to act using a given group, if holder is a group. + * + * @param plugin the plugin instance + * @param sender the sender to check + * @param holder the target group (doesn't have to be a group instance - this method checks that) + * @param contextSet the contexts the sender is trying to act within + * @return true if the sender should NOT be allowed to act, true if they should + */ + public static boolean checkGroup(LuckPermsPlugin plugin, Sender sender, PermissionHolder holder, ContextSet contextSet) { + if (holder.getType().isGroup()) { + return checkGroup(plugin, sender, ((Group) holder).getName(), contextSet); + } + return false; + } + + /** + * Checks if the sender has permission to act using a given group + * + * @param plugin the plugin instance + * @param sender the sender to check + * @param targetGroupName the target group + * @param contextSet the contexts the sender is trying to act within + * @return true if the sender should NOT be allowed to act, true if they should + */ + public static boolean checkGroup(LuckPermsPlugin plugin, Sender sender, String targetGroupName, ContextSet contextSet) { + if (!plugin.getConfiguration().get(ConfigKeys.REQUIRE_SENDER_GROUP_MEMBERSHIP_TO_MODIFY)) { + return false; + } + + if (sender.isConsole()) { + return false; + } + + User user = plugin.getUserManager().getIfLoaded(sender.getUuid()); + if (user == null) { + throw new IllegalStateException("Unable to get a User for " + sender.getUuid() + " - " + sender.getName()); + } + + PermissionCache permissionData = user.getCachedData().getPermissionData(Contexts.of(contextSet, Contexts.global().getSettings())); + return !permissionData.getPermissionValue(NodeFactory.groupNode(targetGroupName), CheckOrigin.INTERNAL).asBoolean(); + } + private ArgumentPermissions() {} } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java index e4817067..27e8c378 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java @@ -77,7 +77,8 @@ public class MetaAddChatMeta extends SharedSubCommand { String meta = ArgumentParser.parseString(1, args); MutableContextSet context = ArgumentParser.parseContext(2, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java index 79989396..7cae9109 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java @@ -82,7 +82,8 @@ public class MetaAddTempChatMeta extends SharedSubCommand { TemporaryMergeBehaviour modifier = ArgumentParser.parseTemporaryModifier(3, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR)); MutableContextSet context = ArgumentParser.parseContext(3, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java index dca60636..60da7e45 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java @@ -91,7 +91,8 @@ public class MetaClear extends SharedSubCommand { MutableContextSet context = ArgumentParser.parseContext(0, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java index a29b030f..f0e3000f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java @@ -77,7 +77,8 @@ public class MetaRemoveChatMeta extends SharedSubCommand { String meta = ArgumentParser.parseStringOrElse(1, args, "null"); MutableContextSet context = ArgumentParser.parseContext(2, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java index 970d0079..cc7fcb4b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java @@ -77,7 +77,8 @@ public class MetaRemoveTempChatMeta extends SharedSubCommand { String meta = ArgumentParser.parseStringOrElse(1, args, "null"); MutableContextSet context = ArgumentParser.parseContext(2, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java index 661b4ed3..03fa079d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java @@ -69,12 +69,9 @@ public class MetaSet extends SharedSubCommand { String value = args.get(1); MutableContextSet context = ArgumentParser.parseContext(2, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, key)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, key)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java index 5b053887..e958a70d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java @@ -96,7 +96,8 @@ public class MetaSetChatMeta extends SharedSubCommand { context = ArgumentParser.parseContext(2, args, plugin); } - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java index ce8d10ac..81c78e47 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java @@ -74,12 +74,9 @@ public class MetaSetTemp extends SharedSubCommand { TemporaryMergeBehaviour modifier = ArgumentParser.parseTemporaryModifier(3, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR)); MutableContextSet context = ArgumentParser.parseContext(3, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, key)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, key)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java index d2dde798..d7f53382 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java @@ -105,7 +105,8 @@ public class MetaSetTempChatMeta extends SharedSubCommand { context = ArgumentParser.parseContext(3, args, plugin); } - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java index 191c4f72..f07cd431 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java @@ -60,12 +60,9 @@ public class MetaUnset extends SharedSubCommand { String key = args.get(0); MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, key)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, key)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java index 19b3ff6a..6db1c99d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java @@ -60,12 +60,9 @@ public class MetaUnsetTemp extends SharedSubCommand { String key = args.get(0); MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, key)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, key)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java index 6814e76b..a4cb6357 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java @@ -61,7 +61,8 @@ public class HolderClear extends SubCommand { MutableContextSet context = ArgumentParser.parseContext(0, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, getPermission().get(), context)) { + if (ArgumentPermissions.checkContext(plugin, sender, getPermission().get(), context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderEditor.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderEditor.java index 192f2a6d..9914a9bd 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderEditor.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderEditor.java @@ -27,6 +27,7 @@ package me.lucko.luckperms.common.commands.generic.other; import com.google.gson.JsonObject; +import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.common.command.CommandResult; import me.lucko.luckperms.common.command.abstraction.SubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; @@ -58,7 +59,7 @@ public class HolderEditor extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, T holder, List args, String label) { - if (ArgumentPermissions.checkViewPerms(plugin, sender, getPermission().get(), holder)) { + if (ArgumentPermissions.checkViewPerms(plugin, sender, getPermission().get(), holder) || ArgumentPermissions.checkGroup(plugin, sender, holder, ContextSet.empty())) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java index e2121846..0cceb876 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java @@ -70,12 +70,10 @@ public class ParentAdd extends SharedSubCommand { return CommandResult.INVALID_ARGS; } - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, group.getName())) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkGroup(plugin, sender, group, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, group.getName())) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java index d47277c0..7b14e6fc 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java @@ -75,12 +75,10 @@ public class ParentAddTemp extends SharedSubCommand { return CommandResult.INVALID_ARGS; } - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, group.getName())) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkGroup(plugin, sender, group, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, group.getName())) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java index b78fd5f8..9ce6a07b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java @@ -61,7 +61,7 @@ public class ParentClear extends SharedSubCommand { MutableContextSet context = ArgumentParser.parseContext(0, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java index ad27ab13..f007d174 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java @@ -82,12 +82,9 @@ public class ParentClearTrack extends SharedSubCommand { MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, track.getName())) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, track.getName())) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java index 99d8c16a..9b4ee4ee 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java @@ -66,12 +66,10 @@ public class ParentRemove extends SharedSubCommand { String groupName = ArgumentParser.parseNameWithSpace(0, args); MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, groupName)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkGroup(plugin, sender, groupName, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, groupName)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java index e173d277..7e6defc6 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java @@ -64,12 +64,10 @@ public class ParentRemoveTemp extends SharedSubCommand { String groupName = ArgumentParser.parseNameWithSpace(0, args); MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, groupName)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkGroup(plugin, sender, groupName, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, groupName)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java index 694a0e16..faabf34f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java @@ -70,12 +70,10 @@ public class ParentSet extends SharedSubCommand { return CommandResult.LOADING_ERROR; } - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, group.getName())) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkGroup(plugin, sender, group, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, group.getName())) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java index cd92d887..c79a23a4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java @@ -103,12 +103,10 @@ public class ParentSetTrack extends SharedSubCommand { return CommandResult.LOADING_ERROR; } - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; - } - - if (ArgumentPermissions.checkArguments(plugin, sender, permission, track.getName(), group.getName())) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkGroup(plugin, sender, group, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, track.getName(), group.getName())) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java index 10011876..22bf21e6 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java @@ -27,6 +27,7 @@ package me.lucko.luckperms.common.commands.generic.parent; import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.StandardNodeEquality; +import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.common.actionlog.ExtendedLogEntry; import me.lucko.luckperms.common.command.CommandResult; import me.lucko.luckperms.common.command.abstraction.SharedSubCommand; @@ -78,6 +79,14 @@ public class UserSwitchPrimaryGroup extends SharedSubCommand { return CommandResult.INVALID_ARGS; } + if (ArgumentPermissions.checkContext(plugin, sender, permission, ContextSet.empty()) || + ArgumentPermissions.checkGroup(plugin, sender, holder, ContextSet.empty()) || + ArgumentPermissions.checkGroup(plugin, sender, group, ContextSet.empty()) || + ArgumentPermissions.checkArguments(plugin, sender, permission, group.getName())) { + Message.COMMAND_NO_PERMISSION.send(sender); + return CommandResult.NO_PERMISSION; + } + if (user.getPrimaryGroup().getStoredValue().orElse(NodeFactory.DEFAULT_GROUP_NAME).equalsIgnoreCase(group.getName())) { Message.USER_PRIMARYGROUP_ERROR_ALREADYHAS.send(sender, user.getFriendlyName(), group.getFriendlyName()); return CommandResult.STATE_ERROR; diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java index fbbe5829..2d4bfd58 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java @@ -61,7 +61,8 @@ public class PermissionClear extends SharedSubCommand { MutableContextSet context = ArgumentParser.parseContext(0, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java index 0f91131c..0052712b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java @@ -27,6 +27,7 @@ package me.lucko.luckperms.common.commands.generic.permission; import me.lucko.luckperms.api.DataMutateResult; import me.lucko.luckperms.api.context.MutableContextSet; +import me.lucko.luckperms.api.nodetype.types.InheritanceType; import me.lucko.luckperms.common.actionlog.ExtendedLogEntry; import me.lucko.luckperms.common.command.CommandResult; import me.lucko.luckperms.common.command.abstraction.CommandException; @@ -43,6 +44,7 @@ import me.lucko.luckperms.common.locale.command.CommandSpec; import me.lucko.luckperms.common.locale.message.Message; import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.node.factory.NodeFactory; +import me.lucko.luckperms.common.node.model.NodeTypes; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.utils.Predicates; @@ -65,14 +67,19 @@ public class PermissionSet extends SharedSubCommand { boolean value = ArgumentParser.parseBoolean(1, args); MutableContextSet context = ArgumentParser.parseContext(2, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, node)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } - if (ArgumentPermissions.checkArguments(plugin, sender, permission, node)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; + InheritanceType inheritanceType = NodeTypes.parseInheritanceType(node); + if (inheritanceType != null) { + if (ArgumentPermissions.checkGroup(plugin, sender, inheritanceType.getGroupName(), context)) { + Message.COMMAND_NO_PERMISSION.send(sender); + return CommandResult.NO_PERMISSION; + } } DataMutateResult result = holder.setPermission(NodeFactory.builder(node).setValue(value).withExtraContext(context).build()); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java index 2e8f6d4f..de9f4f96 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java @@ -28,6 +28,7 @@ package me.lucko.luckperms.common.commands.generic.permission; import me.lucko.luckperms.api.TemporaryDataMutateResult; import me.lucko.luckperms.api.TemporaryMergeBehaviour; import me.lucko.luckperms.api.context.MutableContextSet; +import me.lucko.luckperms.api.nodetype.types.InheritanceType; import me.lucko.luckperms.common.actionlog.ExtendedLogEntry; import me.lucko.luckperms.common.command.CommandResult; import me.lucko.luckperms.common.command.abstraction.CommandException; @@ -45,6 +46,7 @@ import me.lucko.luckperms.common.locale.command.CommandSpec; import me.lucko.luckperms.common.locale.message.Message; import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.node.factory.NodeFactory; +import me.lucko.luckperms.common.node.model.NodeTypes; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.utils.DurationFormatter; @@ -70,14 +72,19 @@ public class PermissionSetTemp extends SharedSubCommand { TemporaryMergeBehaviour modifier = ArgumentParser.parseTemporaryModifier(3, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR)); MutableContextSet context = ArgumentParser.parseContext(3, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, node)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } - if (ArgumentPermissions.checkArguments(plugin, sender, permission, node)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; + InheritanceType inheritanceType = NodeTypes.parseInheritanceType(node); + if (inheritanceType != null) { + if (ArgumentPermissions.checkGroup(plugin, sender, inheritanceType.getGroupName(), context)) { + Message.COMMAND_NO_PERMISSION.send(sender); + return CommandResult.NO_PERMISSION; + } } TemporaryDataMutateResult result = holder.setPermission(NodeFactory.builder(node).setValue(value).withExtraContext(context).setExpiry(duration).build(), modifier); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java index 0bf02a82..7874f443 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java @@ -27,6 +27,7 @@ package me.lucko.luckperms.common.commands.generic.permission; import me.lucko.luckperms.api.DataMutateResult; import me.lucko.luckperms.api.context.MutableContextSet; +import me.lucko.luckperms.api.nodetype.types.InheritanceType; import me.lucko.luckperms.common.actionlog.ExtendedLogEntry; import me.lucko.luckperms.common.command.CommandResult; import me.lucko.luckperms.common.command.abstraction.CommandException; @@ -43,6 +44,7 @@ import me.lucko.luckperms.common.locale.command.CommandSpec; import me.lucko.luckperms.common.locale.message.Message; import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.node.factory.NodeFactory; +import me.lucko.luckperms.common.node.model.NodeTypes; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.utils.Predicates; @@ -64,14 +66,19 @@ public class PermissionUnset extends SharedSubCommand { String node = ArgumentParser.parseString(0, args); MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, node)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } - if (ArgumentPermissions.checkArguments(plugin, sender, permission, node)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; + InheritanceType inheritanceType = NodeTypes.parseInheritanceType(node); + if (inheritanceType != null) { + if (ArgumentPermissions.checkGroup(plugin, sender, inheritanceType.getGroupName(), context)) { + Message.COMMAND_NO_PERMISSION.send(sender); + return CommandResult.NO_PERMISSION; + } } DataMutateResult result = holder.unsetPermission(NodeFactory.builder(node).withExtraContext(context).build()); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java index efb305c5..4da77c7a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java @@ -27,6 +27,7 @@ package me.lucko.luckperms.common.commands.generic.permission; import me.lucko.luckperms.api.DataMutateResult; import me.lucko.luckperms.api.context.MutableContextSet; +import me.lucko.luckperms.api.nodetype.types.InheritanceType; import me.lucko.luckperms.common.actionlog.ExtendedLogEntry; import me.lucko.luckperms.common.command.CommandResult; import me.lucko.luckperms.common.command.abstraction.CommandException; @@ -43,6 +44,7 @@ import me.lucko.luckperms.common.locale.command.CommandSpec; import me.lucko.luckperms.common.locale.message.Message; import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.node.factory.NodeFactory; +import me.lucko.luckperms.common.node.model.NodeTypes; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.utils.Predicates; @@ -64,14 +66,19 @@ public class PermissionUnsetTemp extends SharedSubCommand { String node = ArgumentParser.parseString(0, args); MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); - if (ArgumentPermissions.checkContext(plugin, sender, permission, context)) { + if (ArgumentPermissions.checkContext(plugin, sender, permission, context) || + ArgumentPermissions.checkGroup(plugin, sender, holder, context) || + ArgumentPermissions.checkArguments(plugin, sender, permission, node)) { Message.COMMAND_NO_PERMISSION.send(sender); return CommandResult.NO_PERMISSION; } - if (ArgumentPermissions.checkArguments(plugin, sender, permission, node)) { - Message.COMMAND_NO_PERMISSION.send(sender); - return CommandResult.NO_PERMISSION; + InheritanceType inheritanceType = NodeTypes.parseInheritanceType(node); + if (inheritanceType != null) { + if (ArgumentPermissions.checkGroup(plugin, sender, inheritanceType.getGroupName(), context)) { + Message.COMMAND_NO_PERMISSION.send(sender); + return CommandResult.NO_PERMISSION; + } } DataMutateResult result = holder.unsetPermission(NodeFactory.builder(node).setExpiry(10L).withExtraContext(context).build()); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java index f5ec0f4f..bba4ec11 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java @@ -49,6 +49,7 @@ import me.lucko.luckperms.common.storage.DataConstraints; import me.lucko.luckperms.common.utils.Predicates; import java.util.List; +import java.util.function.Predicate; public class UserDemote extends SubCommand { public UserDemote(LocaleManager locale) { @@ -88,7 +89,11 @@ public class UserDemote extends SubCommand { return CommandResult.NO_PERMISSION; } - DemotionResult result = track.demote(user, context, s -> !ArgumentPermissions.checkArguments(plugin, sender, getPermission().get(), track.getName(), s), sender, removeFromFirst); + Predicate previousGroupPermissionChecker = s -> + !ArgumentPermissions.checkArguments(plugin, sender, getPermission().get(), track.getName(), s) && + !ArgumentPermissions.checkGroup(plugin, sender, s, context); + + DemotionResult result = track.demote(user, context, previousGroupPermissionChecker, sender, removeFromFirst); switch (result.getStatus()) { case NOT_ON_TRACK: Message.USER_TRACK_ERROR_NOT_CONTAIN_GROUP.send(sender, user.getFriendlyName(), track.getName()); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java index 86194269..8610198e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java @@ -49,6 +49,7 @@ import me.lucko.luckperms.common.storage.DataConstraints; import me.lucko.luckperms.common.utils.Predicates; import java.util.List; +import java.util.function.Predicate; public class UserPromote extends SubCommand { public UserPromote(LocaleManager locale) { @@ -88,7 +89,11 @@ public class UserPromote extends SubCommand { return CommandResult.NO_PERMISSION; } - PromotionResult result = track.promote(user, context, s -> !ArgumentPermissions.checkArguments(plugin, sender, getPermission().get(), track.getName(), s), sender, addToFirst); + Predicate nextGroupPermissionChecker = s -> + !ArgumentPermissions.checkArguments(plugin, sender, getPermission().get(), track.getName(), s) && + !ArgumentPermissions.checkGroup(plugin, sender, s, context); + + PromotionResult result = track.promote(user, context, nextGroupPermissionChecker, sender, addToFirst); switch (result.getStatus()) { case MALFORMED_TRACK: Message.USER_PROMOTE_ERROR_MALFORMED.send(sender, result.getGroupTo().get()); diff --git a/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java b/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java index dc1fdf45..e789f6fa 100644 --- a/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java +++ b/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java @@ -181,6 +181,12 @@ public final class ConfigKeys { */ public static final ConfigKey USE_ARGUMENT_BASED_COMMAND_PERMISSIONS = BooleanKey.of("argument-based-command-permissions", false); + /** + * If the plugin should check whether senders are a member of a given group + * before they're able to edit the groups permissions or add/remove it from other users. + */ + public static final ConfigKey REQUIRE_SENDER_GROUP_MEMBERSHIP_TO_MODIFY = BooleanKey.of("require-sender-group-membership-to-modify", false); + /** * If wildcards are being applied */ diff --git a/nukkit/src/main/resources/config.yml b/nukkit/src/main/resources/config.yml index 0ae77e46..009db5c5 100644 --- a/nukkit/src/main/resources/config.yml +++ b/nukkit/src/main/resources/config.yml @@ -276,6 +276,11 @@ primary-group-calculation: parents-by-weight # the arguments given within the command. argument-based-command-permissions: false +# If the plugin should check whether senders are a member of a given group before they're able to +# edit the groups data or add/remove other users to/from it. +# Note: these limitations do not apply to the web editor! +require-sender-group-membership-to-modify: false + # If the plugin should send log notifications to users whenever permissions are modified. # # - Notifications are only sent to those with the appropriate permission to receive them diff --git a/sponge/src/main/resources/luckperms.conf b/sponge/src/main/resources/luckperms.conf index af54213c..1cf1f381 100644 --- a/sponge/src/main/resources/luckperms.conf +++ b/sponge/src/main/resources/luckperms.conf @@ -285,6 +285,11 @@ primary-group-calculation = "parents-by-weight" # the arguments given within the command. argument-based-command-permissions = false +# If the plugin should check whether senders are a member of a given group before they're able to +# edit the groups data or add/remove other users to/from it. +# Note: these limitations do not apply to the web editor! +require-sender-group-membership-to-modify = false + # If the plugin should send log notifications to users whenever permissions are modified. # # - Notifications are only sent to those with the appropriate permission to receive them diff --git a/velocity/src/main/resources/config.yml b/velocity/src/main/resources/config.yml index df224731..ec27e49d 100644 --- a/velocity/src/main/resources/config.yml +++ b/velocity/src/main/resources/config.yml @@ -280,6 +280,11 @@ primary-group-calculation: parents-by-weight # the arguments given within the command. argument-based-command-permissions: false +# If the plugin should check whether senders are a member of a given group before they're able to +# edit the groups data or add/remove other users to/from it. +# Note: these limitations do not apply to the web editor! +require-sender-group-membership-to-modify: false + # If the plugin should send log notifications to users whenever permissions are modified. # # - Notifications are only sent to those with the appropriate permission to receive them