implement checking permissions of an offline player

This commit is contained in:
Gnat008 2016-06-17 20:49:03 -04:00
parent 3629c51fc1
commit 16e9990723
3 changed files with 28 additions and 3 deletions

View File

@ -1,5 +1,6 @@
package fr.xephi.authme.permission; package fr.xephi.authme.permission;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
/** /**
@ -13,6 +14,11 @@ public enum DefaultPermission {
public boolean evaluate(CommandSender sender) { public boolean evaluate(CommandSender sender) {
return false; return false;
} }
@Override
public boolean evaluateOffline(String name) {
return false;
}
}, },
/** Only players with OP status have permission. */ /** Only players with OP status have permission. */
@ -21,6 +27,12 @@ public enum DefaultPermission {
public boolean evaluate(CommandSender sender) { public boolean evaluate(CommandSender sender) {
return sender.isOp(); return sender.isOp();
} }
@Override
public boolean evaluateOffline(String name) {
// TODO Gnat008 20160617: Is this safe?
return Bukkit.getOfflinePlayer(name).isOp();
}
}, },
/** Everyone is granted permission. */ /** Everyone is granted permission. */
@ -29,6 +41,11 @@ public enum DefaultPermission {
public boolean evaluate(CommandSender sender) { public boolean evaluate(CommandSender sender) {
return true; return true;
} }
@Override
public boolean evaluateOffline(String name) {
return true;
}
}; };
/** Textual representation of the default permission. */ /** Textual representation of the default permission. */
@ -50,6 +67,14 @@ public enum DefaultPermission {
*/ */
public abstract boolean evaluate(CommandSender sender); public abstract boolean evaluate(CommandSender sender);
/**
* Evaluate whether permission is granted to an offline user.
*
* @param name The name to check
* @return True if the user has permission, false otherwise
*/
public abstract boolean evaluateOffline(String name);
/** /**
* Return the textual representation. * Return the textual representation.
* *

View File

@ -258,14 +258,14 @@ public class PermissionsManager {
* *
* @return * @return
*/ */
public boolean hasPermission(String name, PermissionNode permissionNode) { public boolean hasPermissionOffline(String name, PermissionNode permissionNode) {
// Check if the permission node is null // Check if the permission node is null
if (permissionNode == null) { if (permissionNode == null) {
return true; return true;
} }
if (!isEnabled()) { if (!isEnabled()) {
return false; return permissionNode.getDefaultPermission().evaluateOffline(name);
} }
return handler.hasPermission(name, permissionNode); return handler.hasPermission(name, permissionNode);

View File

@ -145,7 +145,7 @@ public class PurgeService implements Reloadable {
Set<String> toPurge = new HashSet<>(); Set<String> toPurge = new HashSet<>();
for (String name : initial) { for (String name : initial) {
if (!permissionsManager.hasPermission(name, PlayerStatePermission.BYPASS_PURGE)) { if (!permissionsManager.hasPermissionOffline(name, PlayerStatePermission.BYPASS_PURGE)) {
toPurge.add(name); toPurge.add(name);
} }
} }