From 04d5310c04bf6821893cc7777d5ca1328a029b14 Mon Sep 17 00:00:00 2001 From: Luck Date: Mon, 16 Oct 2017 18:53:02 +0100 Subject: [PATCH] Ensure users are a member of their primary group (#506) --- .../common/managers/GenericUserManager.java | 40 +++++++++++++++---- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/managers/GenericUserManager.java b/common/src/main/java/me/lucko/luckperms/common/managers/GenericUserManager.java index 1b1c28497..b890c05fc 100644 --- a/common/src/main/java/me/lucko/luckperms/common/managers/GenericUserManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/managers/GenericUserManager.java @@ -28,6 +28,7 @@ package me.lucko.luckperms.common.managers; import lombok.RequiredArgsConstructor; import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.node.NodeFactory; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -120,8 +121,32 @@ public class GenericUserManager extends AbstractManager im } public static boolean giveDefaultIfNeeded(User user, boolean save, LuckPermsPlugin plugin) { - boolean hasGroup = false; + boolean work = false; + // check that they are actually a member of their primary group, otherwise remove it + if (plugin.getConfiguration().get(ConfigKeys.PRIMARY_GROUP_CALCULATION_METHOD).equals("stored")) { + String pg = user.getPrimaryGroup().getValue(); + boolean has = false; + + for (Node node : user.getEnduringNodes().values()) { + if (node.hasSpecificContext()) { + continue; + } + + if (node.isGroupNode() && node.getGroupName().equalsIgnoreCase(pg)) { + has = true; + break; + } + } + + if (!has) { + user.getPrimaryGroup().setStoredValue("default"); + work = true; + } + } + + // check that all users are member of at least one group + boolean hasGroup = false; if (user.getPrimaryGroup().getStoredValue().isPresent()) { for (Node node : user.getEnduringNodes().values()) { if (node.hasSpecificContext()) { @@ -135,18 +160,17 @@ public class GenericUserManager extends AbstractManager im } } - if (hasGroup) { - return false; + if (!hasGroup) { + user.getPrimaryGroup().setStoredValue("default"); + user.setPermission(NodeFactory.make("group.default")); + work = true; } - user.getPrimaryGroup().setStoredValue("default"); - user.setPermission(NodeFactory.make("group.default")); - - if (save) { + if (work && save) { plugin.getStorage().saveUser(user); } - return true; + return work; } /**