mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-10-06 01:07:29 +02:00
Fix issue where group nodes could be unset using the permission commands, and where users with per-server groups wouldn't be assigned to the default group globally
This commit is contained in:
parent
53c9e5bb4a
commit
ecf1d3790c
@ -31,6 +31,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
|
|||||||
import me.lucko.luckperms.common.commands.utils.ContextHelper;
|
import me.lucko.luckperms.common.commands.utils.ContextHelper;
|
||||||
import me.lucko.luckperms.common.constants.Message;
|
import me.lucko.luckperms.common.constants.Message;
|
||||||
import me.lucko.luckperms.common.constants.Permission;
|
import me.lucko.luckperms.common.constants.Permission;
|
||||||
|
import me.lucko.luckperms.common.core.NodeFactory;
|
||||||
import me.lucko.luckperms.common.core.model.PermissionHolder;
|
import me.lucko.luckperms.common.core.model.PermissionHolder;
|
||||||
import me.lucko.luckperms.common.data.LogEntry;
|
import me.lucko.luckperms.common.data.LogEntry;
|
||||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||||
@ -59,19 +60,38 @@ public class PermissionUnset extends SharedSubCommand {
|
|||||||
String world = ArgumentUtils.handleWorld(2, args);
|
String world = ArgumentUtils.handleWorld(2, args);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
switch (ContextHelper.determine(server, world)) {
|
// unset exact - with false value only
|
||||||
case NONE:
|
if (node.startsWith("group.")) {
|
||||||
holder.unsetPermission(node);
|
switch (ContextHelper.determine(server, world)) {
|
||||||
Message.UNSETPERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName());
|
case NONE:
|
||||||
break;
|
holder.unsetPermissionExact(NodeFactory.make(node, false));
|
||||||
case SERVER:
|
Message.UNSETPERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName());
|
||||||
holder.unsetPermission(node, server);
|
break;
|
||||||
Message.UNSETPERMISSION_SERVER_SUCCESS.send(sender, node, holder.getFriendlyName(), server);
|
case SERVER:
|
||||||
break;
|
holder.unsetPermissionExact(NodeFactory.make(node, false, server));
|
||||||
case SERVER_AND_WORLD:
|
Message.UNSETPERMISSION_SERVER_SUCCESS.send(sender, node, holder.getFriendlyName(), server);
|
||||||
holder.unsetPermission(node, server, world);
|
break;
|
||||||
Message.UNSETPERMISSION_SERVER_WORLD_SUCCESS.send(sender, node, holder.getFriendlyName(), server, world);
|
case SERVER_AND_WORLD:
|
||||||
break;
|
holder.unsetPermissionExact(NodeFactory.make(node, false, server, world));
|
||||||
|
Message.UNSETPERMISSION_SERVER_WORLD_SUCCESS.send(sender, node, holder.getFriendlyName(), server, world);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// standard unset
|
||||||
|
switch (ContextHelper.determine(server, world)) {
|
||||||
|
case NONE:
|
||||||
|
holder.unsetPermission(node);
|
||||||
|
Message.UNSETPERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName());
|
||||||
|
break;
|
||||||
|
case SERVER:
|
||||||
|
holder.unsetPermission(node, server);
|
||||||
|
Message.UNSETPERMISSION_SERVER_SUCCESS.send(sender, node, holder.getFriendlyName(), server);
|
||||||
|
break;
|
||||||
|
case SERVER_AND_WORLD:
|
||||||
|
holder.unsetPermission(node, server, world);
|
||||||
|
Message.UNSETPERMISSION_SERVER_WORLD_SUCCESS.send(sender, node, holder.getFriendlyName(), server, world);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogEntry.build().actor(sender).acted(holder)
|
LogEntry.build().actor(sender).acted(holder)
|
||||||
|
@ -31,6 +31,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
|
|||||||
import me.lucko.luckperms.common.commands.utils.ContextHelper;
|
import me.lucko.luckperms.common.commands.utils.ContextHelper;
|
||||||
import me.lucko.luckperms.common.constants.Message;
|
import me.lucko.luckperms.common.constants.Message;
|
||||||
import me.lucko.luckperms.common.constants.Permission;
|
import me.lucko.luckperms.common.constants.Permission;
|
||||||
|
import me.lucko.luckperms.common.core.NodeFactory;
|
||||||
import me.lucko.luckperms.common.core.model.PermissionHolder;
|
import me.lucko.luckperms.common.core.model.PermissionHolder;
|
||||||
import me.lucko.luckperms.common.data.LogEntry;
|
import me.lucko.luckperms.common.data.LogEntry;
|
||||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
||||||
@ -59,19 +60,37 @@ public class PermissionUnsetTemp extends SharedSubCommand {
|
|||||||
String world = ArgumentUtils.handleWorld(2, args);
|
String world = ArgumentUtils.handleWorld(2, args);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
switch (ContextHelper.determine(server, world)) {
|
// unset exact - with false value only
|
||||||
case NONE:
|
if (node.startsWith("group.")) {
|
||||||
holder.unsetPermission(node, true);
|
switch (ContextHelper.determine(server, world)) {
|
||||||
Message.UNSET_TEMP_PERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName());
|
case NONE:
|
||||||
break;
|
holder.unsetPermissionExact(NodeFactory.make(node, false, true));
|
||||||
case SERVER:
|
Message.UNSET_TEMP_PERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName());
|
||||||
holder.unsetPermission(node, server, true);
|
break;
|
||||||
Message.UNSET_TEMP_PERMISSION_SERVER_SUCCESS.send(sender, node, holder.getFriendlyName(), server);
|
case SERVER:
|
||||||
break;
|
holder.unsetPermissionExact(NodeFactory.make(node, false, server, true));
|
||||||
case SERVER_AND_WORLD:
|
Message.UNSET_TEMP_PERMISSION_SERVER_SUCCESS.send(sender, node, holder.getFriendlyName(), server);
|
||||||
holder.unsetPermission(node, server, world, true);
|
break;
|
||||||
Message.UNSET_TEMP_PERMISSION_SERVER_WORLD_SUCCESS.send(sender, node, holder.getFriendlyName(), server, world);
|
case SERVER_AND_WORLD:
|
||||||
break;
|
holder.unsetPermissionExact(NodeFactory.make(node, false, server, world, true));
|
||||||
|
Message.UNSET_TEMP_PERMISSION_SERVER_WORLD_SUCCESS.send(sender, node, holder.getFriendlyName(), server, world);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch (ContextHelper.determine(server, world)) {
|
||||||
|
case NONE:
|
||||||
|
holder.unsetPermission(node, true);
|
||||||
|
Message.UNSET_TEMP_PERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName());
|
||||||
|
break;
|
||||||
|
case SERVER:
|
||||||
|
holder.unsetPermission(node, server, true);
|
||||||
|
Message.UNSET_TEMP_PERMISSION_SERVER_SUCCESS.send(sender, node, holder.getFriendlyName(), server);
|
||||||
|
break;
|
||||||
|
case SERVER_AND_WORLD:
|
||||||
|
holder.unsetPermission(node, server, world, true);
|
||||||
|
Message.UNSET_TEMP_PERMISSION_SERVER_WORLD_SUCCESS.send(sender, node, holder.getFriendlyName(), server, world);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogEntry.build().actor(sender).acted(holder)
|
LogEntry.build().actor(sender).acted(holder)
|
||||||
|
@ -875,6 +875,29 @@ public abstract class PermissionHolder {
|
|||||||
} catch (ObjectLacksException ignored) {}
|
} catch (ObjectLacksException ignored) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unsets a permission node
|
||||||
|
*
|
||||||
|
* @param node the node to unset
|
||||||
|
* @throws ObjectLacksException if the holder doesn't have this node already
|
||||||
|
*/
|
||||||
|
public void unsetPermissionExact(Node node) throws ObjectLacksException {
|
||||||
|
ImmutableSet<Node> before = ImmutableSet.copyOf(getNodes());
|
||||||
|
|
||||||
|
synchronized (nodes) {
|
||||||
|
nodes.removeIf(e -> e.equals(node));
|
||||||
|
}
|
||||||
|
invalidateCache(true);
|
||||||
|
|
||||||
|
ImmutableSet<Node> after = ImmutableSet.copyOf(getNodes());
|
||||||
|
|
||||||
|
if (before.size() == after.size()) {
|
||||||
|
throw new ObjectLacksException();
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin.getApiProvider().getEventFactory().handleNodeRemove(node, this, before, after);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unsets a transient permission node
|
* Unsets a transient permission node
|
||||||
*
|
*
|
||||||
|
@ -42,6 +42,10 @@ public class GenericUserManager extends AbstractManager<UserIdentifier, User> im
|
|||||||
|
|
||||||
if (user.getPrimaryGroup() != null && !user.getPrimaryGroup().isEmpty()) {
|
if (user.getPrimaryGroup() != null && !user.getPrimaryGroup().isEmpty()) {
|
||||||
for (Node node : user.getPermissions(false)) {
|
for (Node node : user.getPermissions(false)) {
|
||||||
|
if (node.isServerSpecific() || node.isWorldSpecific()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (node.isGroupNode()) {
|
if (node.isGroupNode()) {
|
||||||
hasGroup = true;
|
hasGroup = true;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user