#314 Encapsulate permissions package better
- Move permissions responsibilities from command to permissions (remove some logic from CommandPermissions, add DefaultPermission enum to permissions package) - Start possible interface for the future per-permission system implementations of permissions managers
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
package fr.xephi.authme.permission;
|
||||
|
||||
/**
|
||||
* The default permission for a command if there is no support for permission nodes.
|
||||
*/
|
||||
public enum DefaultPermission {
|
||||
|
||||
/** No one can execute the command. */
|
||||
NOT_ALLOWED,
|
||||
|
||||
/** Only players with the OP status may execute the command. */
|
||||
OP_ONLY,
|
||||
|
||||
/** The command can be executed by anyone. */
|
||||
ALLOWED
|
||||
}
|
||||
@@ -5,11 +5,14 @@ import com.nijiko.permissions.PermissionHandler;
|
||||
import com.nijikokun.bukkit.Permissions.Permissions;
|
||||
import de.bananaco.bpermissions.api.ApiLayer;
|
||||
import de.bananaco.bpermissions.api.CalculableType;
|
||||
import fr.xephi.authme.command.CommandDescription;
|
||||
import fr.xephi.authme.util.CollectionUtils;
|
||||
import net.milkbowl.vault.permission.Permission;
|
||||
import org.anjocaido.groupmanager.GroupManager;
|
||||
import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.server.PluginDisableEvent;
|
||||
import org.bukkit.event.server.PluginEnableEvent;
|
||||
@@ -38,7 +41,7 @@ import java.util.logging.Logger;
|
||||
* @author Tim Visée, http://timvisee.com
|
||||
* @version 0.2.1
|
||||
*/
|
||||
public class PermissionsManager {
|
||||
public class PermissionsManager implements PermissionsService {
|
||||
|
||||
/**
|
||||
* Vault instance.
|
||||
@@ -100,8 +103,8 @@ public class PermissionsManager {
|
||||
*
|
||||
* @return The name of the permissions system used.
|
||||
*/
|
||||
public String getUsedPermissionsSystemType() {
|
||||
return this.permsType.getName();
|
||||
public PermissionsSystemType getSystem() {
|
||||
return permsType;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -260,7 +263,6 @@ public class PermissionsManager {
|
||||
*
|
||||
* @param event Event instance.
|
||||
*/
|
||||
// TODO ljacqu 20151129: Misleading name since onPluginEnable is a typical event-based method name
|
||||
public void onPluginEnable(PluginEnableEvent event) {
|
||||
// Get the plugin and it's name
|
||||
Plugin plugin = event.getPlugin();
|
||||
@@ -296,35 +298,7 @@ public class PermissionsManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the logger instance.
|
||||
*
|
||||
* @return Logger instance.
|
||||
*/
|
||||
public Logger getLogger() {
|
||||
return this.log;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the logger instance.
|
||||
*
|
||||
* @param log Logger instance.
|
||||
*/
|
||||
public void setLogger(Logger log) {
|
||||
this.log = log;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the player has permission. If no permissions system is used, the player has to be OP.
|
||||
*
|
||||
* @param player The player.
|
||||
* @param permsNode Permissions node.
|
||||
*
|
||||
* @return True if the player has permission.
|
||||
*/
|
||||
public boolean hasPermission(Player player, String permsNode) {
|
||||
return hasPermission(player, permsNode, player.isOp());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the player has permission for the given permissions node. If no permissions system is used,
|
||||
@@ -343,6 +317,39 @@ public class PermissionsManager {
|
||||
return hasPermission(player, permissionNode.getNode(), def);
|
||||
}
|
||||
|
||||
public boolean hasPermission(Player player, Iterable<PermissionNode> nodes, boolean def) {
|
||||
for (PermissionNode node : nodes) {
|
||||
if (!hasPermission(player, node, def)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean hasPermission(Player player, CommandDescription command) {
|
||||
if (CollectionUtils.isEmpty(command.getCommandPermissions().getPermissionNodes())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
DefaultPermission defaultPermission = command.getCommandPermissions().getDefaultPermission();
|
||||
boolean def = evaluateDefaultPermission(defaultPermission, player);
|
||||
return hasPermission(player, command.getCommandPermissions().getPermissionNodes(), def);
|
||||
}
|
||||
|
||||
public static boolean evaluateDefaultPermission(DefaultPermission defaultPermission, CommandSender sender) {
|
||||
switch (defaultPermission) {
|
||||
case ALLOWED:
|
||||
return true;
|
||||
|
||||
case OP_ONLY:
|
||||
return sender.isOp();
|
||||
|
||||
case NOT_ALLOWED:
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a player has permission.
|
||||
*
|
||||
@@ -352,7 +359,7 @@ public class PermissionsManager {
|
||||
*
|
||||
* @return True if the player has permission.
|
||||
*/
|
||||
public boolean hasPermission(Player player, String permsNode, boolean def) {
|
||||
private boolean hasPermission(Player player, String permsNode, boolean def) {
|
||||
// If no permissions system is used, return the default value
|
||||
if (!isEnabled())
|
||||
return def;
|
||||
@@ -915,34 +922,5 @@ public class PermissionsManager {
|
||||
return removeGroups(player, groupNames);
|
||||
}
|
||||
|
||||
private enum PermissionsSystemType {
|
||||
NONE("None"),
|
||||
PERMISSIONS_EX("PermissionsEx"),
|
||||
PERMISSIONS_BUKKIT("Permissions Bukkit"),
|
||||
B_PERMISSIONS("bPermissions"),
|
||||
ESSENTIALS_GROUP_MANAGER("Essentials Group Manager"),
|
||||
Z_PERMISSIONS("zPermissions"),
|
||||
VAULT("Vault"),
|
||||
PERMISSIONS("Permissions");
|
||||
|
||||
public final String name;
|
||||
|
||||
/**
|
||||
* Constructor for PermissionsSystemType.
|
||||
*
|
||||
* @param name String
|
||||
*/
|
||||
PermissionsSystemType(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method getName.
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package fr.xephi.authme.permission;
|
||||
|
||||
import fr.xephi.authme.command.CommandDescription;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
/**
|
||||
* Interface for dealing with permissions.
|
||||
*/
|
||||
public interface PermissionsService {
|
||||
|
||||
/**
|
||||
* Check if the player has the given permission.
|
||||
*
|
||||
* @param player The player
|
||||
* @param permission The permission node to check
|
||||
* @param def Default returned if no permissions system is used
|
||||
*
|
||||
* @return True if the player has permission
|
||||
*/
|
||||
boolean hasPermission(Player player, PermissionNode permission, boolean def);
|
||||
|
||||
/**
|
||||
* Check if the player has the permissions for the given command.
|
||||
*
|
||||
* @param player The player
|
||||
* @param command The command whose permissions should be checked
|
||||
*
|
||||
* @return True if the player may execute the command
|
||||
*/
|
||||
boolean hasPermission(Player player, CommandDescription command);
|
||||
|
||||
/**
|
||||
* Return the permission system the service is working with.
|
||||
*
|
||||
* @return The permission system AuthMe is hooked into
|
||||
*/
|
||||
PermissionsSystemType getSystem();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package fr.xephi.authme.permission;
|
||||
|
||||
/**
|
||||
* Enum representing the permissions systems AuthMe supports.
|
||||
*/
|
||||
public enum PermissionsSystemType {
|
||||
|
||||
NONE("None"),
|
||||
|
||||
PERMISSIONS_EX("PermissionsEx"),
|
||||
|
||||
PERMISSIONS_BUKKIT("Permissions Bukkit"),
|
||||
|
||||
B_PERMISSIONS("bPermissions"),
|
||||
|
||||
ESSENTIALS_GROUP_MANAGER("Essentials Group Manager"),
|
||||
|
||||
Z_PERMISSIONS("zPermissions"),
|
||||
|
||||
VAULT("Vault"),
|
||||
|
||||
PERMISSIONS("Permissions");
|
||||
|
||||
public final String name;
|
||||
|
||||
/**
|
||||
* Constructor for PermissionsSystemType.
|
||||
*
|
||||
* @param name The name the permissions manager goes by
|
||||
*/
|
||||
PermissionsSystemType(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user