Skip to content

Commit 1f100fe

Browse files
committed
Don't allow permissions to be added / removed if they exist/don't
1 parent 774cd9a commit 1f100fe

File tree

9 files changed

+40
-112
lines changed

9 files changed

+40
-112
lines changed

API/src/main/java/me/innectic/permissify/api/PermissifyConstants.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ public class PermissifyConstants {
8181
public static final String PERMISSION_REMOVED_PLAYER = PERMISSIFY_PREFIX + "&e&lPermission <PERMISSION> has been removed from <PLAYER>!";
8282
public static final String PLAYER_ADDED_TO_GROUP = PERMISSIFY_PREFIX + "&e&lAdded <PLAYER> to <GROUP>";
8383
public static final String PLAYER_REMOVED_FROM_GROUP = PERMISSIFY_PREFIX + "&e&lRemoved <PLAYER> from <GROUP>";
84-
public static final String FORMATTER_SET = PERMISSIFY_PREFIX + "&e&lFormatter <FORMATTER> set!";
8584
public static final String MAIN_GROUP_SET = PERMISSIFY_PREFIX + "&e&lSet main group for <PLAYER> to <GROUP>!";
86-
public static final String TOGGLED_CHAT_HANDLE = PERMISSIFY_PREFIX + "&e&l<STATE> chat formatting.";
85+
public static final String PLAYER_ALREADY_HAS_PERMISSION = PERMISSIFY_PREFIX + "&c&lPlayer <PLAYER> already has permission <PERMISSION>";
86+
public static final String PLAYER_DOES_NOT_HAVE_PERMISSION = PERMISSIFY_PREFIX + "&c&lPlayer <PLAYER> does not have permission <PERMISSION>";
8787

8888
public static final String EMPTY_DEFAULT_GROUP_NAME = "&c&lNONE";
8989
public static final String DEFAULT_GROUP_RESPONSE = PERMISSIFY_PREFIX + "&e&lThe current default group is '<GROUP>&e&l'.";

API/src/main/java/me/innectic/permissify/api/database/DatabaseHandler.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,19 @@ public DatabaseHandler(ConnectionInformation connectionInformation) {
121121
*
122122
* @param uuid the uuid of the player to check
123123
* @param permission the permission to check
124-
* @return if the player has the permission
124+
* @return if the player has the permission, regardless of the granted status
125125
*/
126126
public abstract boolean hasPermission(UUID uuid, String permission);
127127

128+
/**
129+
* Does a player have a permission granted to them?
130+
*
131+
* @param uuid the uuid of the player to check
132+
* @param permission the permission to check for
133+
* @return if the player has the permission
134+
*/
135+
public abstract boolean isGrantedPermission(UUID uuid, String permission);
136+
128137
/**
129138
* Get the permissions of a uuid
130139
*

API/src/main/java/me/innectic/permissify/api/database/handlers/SQLHandler.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -350,14 +350,15 @@ public void addPermission(UUID uuid, String... permissions) {
350350
List<Permission> playerPermissions = cachedPermissions.getOrDefault(uuid, new ArrayList<>());
351351

352352
for (String permission : permissions) {
353-
Permission perm = new Permission(permission, true);
354-
playerPermissions.add(perm);
355-
356353
Optional<Connection> connection = getConnection();
357354
if (!connection.isPresent()) {
358355
PermissifyAPI.get().ifPresent(api -> api.getDisplayUtil().displayError(ConnectionError.REJECTED, Optional.empty()));
359356
return;
360357
}
358+
359+
Permission perm = new Permission(permission, true);
360+
playerPermissions.add(perm);
361+
361362
try {
362363
PreparedStatement statement = connection.get().prepareStatement("INSERT INTO playerPermissions (uuid,permission,granted) VALUES (?,?,?)");
363364
statement.setString(1, uuid.toString());
@@ -392,14 +393,7 @@ public void removePermission(UUID uuid, String... permissions) {
392393
PreparedStatement statement = connection.get().prepareStatement("DELETE FROM playerPermissions WHERE uuid=? AND permission=?");
393394
statement.setString(1, uuid.toString());
394395
statement.setString(2, permission);
395-
statement.execute();
396-
// Cleanup
397-
statement.close();
398-
statement = connection.get().prepareStatement("INSERT INTO playerPermissions (uuid,permission,granted) VALUES (?,?,?)");
399-
statement.setString(1, uuid.toString());
400-
statement.setString(2, permission);
401-
statement.setBoolean(3, false);
402-
// Cleanup
396+
403397
statement.execute();
404398
statement.close();
405399
connection.get().close();
@@ -410,7 +404,7 @@ public void removePermission(UUID uuid, String... permissions) {
410404
}
411405

412406
@Override
413-
public boolean hasPermission(UUID uuid, String permission) {
407+
public boolean isGrantedPermission(UUID uuid, String permission) {
414408
// Check the cache first
415409
if (cachedPermissions.containsKey(uuid))
416410
return cachedPermissions.get(uuid).stream()
@@ -442,6 +436,11 @@ public boolean hasPermission(UUID uuid, String permission) {
442436
return false;
443437
}
444438

439+
@Override
440+
public boolean hasPermission(UUID uuid, String permission) {
441+
return cachedPermissions.containsKey(uuid) && cachedPermissions.get(uuid).stream().filter(entry -> entry.getPermission().equals(permission)).count() == 1;
442+
}
443+
445444
@Override
446445
public List<Permission> getPermissions(UUID uuid) {
447446
if (cachedPermissions.containsKey(uuid)) return cachedPermissions.get(uuid);

API/src/main/java/me/innectic/permissify/api/group/group/PermissionGroup.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,13 @@
3939
*/
4040
@RequiredArgsConstructor
4141
public class PermissionGroup {
42-
@Getter private final String name;
43-
@Getter private final String displayName;
44-
@Getter private final String chatColor;
45-
@Getter private final String prefix;
46-
@Getter private final String suffix;
47-
@NonNull @Getter @Setter private AbstractLadder ladder;
42+
@Getter @NonNull private String name;
43+
@Getter @NonNull private String displayName;
44+
@Getter @NonNull private String chatColor;
45+
@Getter @NonNull private String prefix;
46+
@Getter @NonNull private String suffix;
47+
@Getter @Setter @NonNull private AbstractLadder ladder;
48+
4849
@Getter private List<Permission> permissions = new ArrayList<>();
4950
@Getter private Map<UUID, Boolean> players = new HashMap<>();
5051

Spigot/src/main/java/me/innectic/permissify/spigot/PermissifyMain.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ public class PermissifyMain extends JavaPlugin {
5353

5454
@Getter private GroupCommand groupCommand;
5555
@Getter private PlayerCommand playerCommand;
56-
@Getter private FormatCommand formatCommand;
5756
@Getter private CacheCommand cacheCommand;
5857
@Getter private ProfileCommand profileCommand;
5958

@@ -125,7 +124,6 @@ public static PermissifyMain getInstance() {
125124
private void registerCommands() {
126125
groupCommand = new GroupCommand();
127126
playerCommand = new PlayerCommand();
128-
formatCommand = new FormatCommand();
129127
cacheCommand = new CacheCommand();
130128
profileCommand = new ProfileCommand();
131129

Spigot/src/main/java/me/innectic/permissify/spigot/commands/PermissifyCommand.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,6 @@ else if (args[1].equalsIgnoreCase("listgroups"))
132132
return;
133133
}
134134
sendResponse(response, sender);
135-
} else if (args[0].equalsIgnoreCase("format")) {
136-
String response = plugin.getFormatCommand().handleSetFormat(sender, ArgumentUtil.getRemainingArgs(1, args));
137-
sender.sendMessage(ColorUtil.makeReadable(response));
138135
} else if (args[0].equalsIgnoreCase("profile")) {
139136
String response = plugin.getProfileCommand().handleProfile(sender, ArgumentUtil.getRemainingArgs(1, args));
140137
sender.sendMessage(ColorUtil.makeReadable(response));

Spigot/src/main/java/me/innectic/permissify/spigot/commands/permissify/FormatCommand.java

Lines changed: 0 additions & 83 deletions
This file was deleted.

Spigot/src/main/java/me/innectic/permissify/spigot/commands/permissify/PlayerCommand.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ public String handleAddPermission(CommandSender sender, String[] args) {
136136
OfflinePlayer targetPlayer = Bukkit.getPlayer(args[0]);
137137
if (targetPlayer == null || !targetPlayer.hasPlayedBefore()) return PermissifyConstants.INVALID_PLAYER;
138138

139+
if (plugin.getPermissifyAPI().getDatabaseHandler().get().hasPermission(targetPlayer.getUniqueId(), args[1])) {
140+
// Player already has this permission.
141+
return PermissifyConstants.PLAYER_ALREADY_HAS_PERMISSION.replace("<PLAYER>", targetPlayer.getName()).replace("<PERMISSION>", args[1]);
142+
}
139143
plugin.getPermissifyAPI().getDatabaseHandler().get().addPermission(targetPlayer.getUniqueId(), args[1]);
140144
if (targetPlayer.isOnline()) targetPlayer.getPlayer().addAttachment(plugin, args[1], true);
141145

@@ -174,6 +178,11 @@ public String handleRemovePermission(CommandSender sender, String[] args) {
174178

175179
OfflinePlayer targetPlayer = Bukkit.getPlayer(args[0]);
176180
if (targetPlayer == null || !targetPlayer.hasPlayedBefore()) return PermissifyConstants.INVALID_PLAYER;
181+
if (!plugin.getPermissifyAPI().getDatabaseHandler().get().hasPermission(targetPlayer.getUniqueId(), args[1])) {
182+
// Player doesn't have this permission
183+
return PermissifyConstants.PLAYER_DOES_NOT_HAVE_PERMISSION.replace("<PLAYER>", targetPlayer.getName()).replace("<PERMISSION>", args[1]);
184+
}
185+
177186
plugin.getPermissifyAPI().getDatabaseHandler().get().removePermission(targetPlayer.getUniqueId(), args[1]);
178187
if (targetPlayer.isOnline()) targetPlayer.getPlayer().addAttachment(plugin, args[1], false);
179188

@@ -193,8 +202,6 @@ public String handleListGroups(CommandSender sender, String[] args) {
193202
if (args.length < 1) return PermissifyConstants.NOT_ENOUGH_ARGUMENTS_PLAYER_LIST_GROUP;
194203

195204
OfflinePlayer targetPlayer = Bukkit.getPlayer(args[0]);
196-
System.out.println(args[0]);
197-
System.out.println(targetPlayer.getName());
198205
if (targetPlayer == null || !targetPlayer.hasPlayedBefore()) return PermissifyConstants.INVALID_PLAYER;
199206

200207
List<String> groups = plugin.getPermissifyAPI().getDatabaseHandler().get().getGroups().entrySet().stream()

Spigot/src/main/java/me/innectic/permissify/spigot/utils/PermissionUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public static boolean hasPermissionOrSuperAdmin(CommandSender sender, String per
4747
(PermissifyMain.getInstance().getPermissifyAPI().getDatabaseHandler().map(handler ->
4848
handler.isSuperAdmin(player.getUniqueId())).orElse(false));
4949
}
50-
return sender instanceof CommandBlock || sender instanceof ConsoleCommandSender; // XXX: Maybe we don't want command blocks here?
50+
return sender instanceof CommandBlock || sender instanceof ConsoleCommandSender;
5151
}
5252

5353
public static void applyPermissions(Player player) {

0 commit comments

Comments
 (0)