#285 #319 Add support for wildcard permissions

- Add wildcard attribute to permission nodes that are checked additionally in the permissions manager
This commit is contained in:
ljacqu 2015-12-05 23:33:09 +01:00
parent f99bba4b5f
commit 63a7cd00df
4 changed files with 38 additions and 26 deletions

View File

@ -103,23 +103,13 @@ public enum AdminPermission implements PermissionNode {
/**
* Give access to all admin commands.
*/
ALL("authme.admin.*");
ADMIN_ALL("authme.admin.*");
/**
* Permission node.
* The permission node.
*/
private String node;
/**
* Get the permission node.
*
* @return Permission node.
*/
@Override
public String getNode() {
return node;
}
/**
* Constructor.
*
@ -128,4 +118,14 @@ public enum AdminPermission implements PermissionNode {
AdminPermission(String node) {
this.node = node;
}
@Override
public String getNode() {
return node;
}
@Override
public PermissionNode getWildcardNode() {
return ADMIN_ALL;
}
}

View File

@ -5,7 +5,18 @@ package fr.xephi.authme.permission;
*/
public interface PermissionNode {
/** Return the node of the permission, e.g. "authme.unregister". */
/**
* Return the node of the permission, e.g. "authme.player.unregister".
*
* @return The name of the permission node
*/
String getNode();
/**
* Return the wildcard node that also grants the permission.
*
* @return The wildcard permission node (e.g. "authme.player.*")
*/
PermissionNode getWildcardNode();
}

View File

@ -314,7 +314,8 @@ public class PermissionsManager implements PermissionsService {
}
public boolean hasPermission(Player player, PermissionNode permissionNode, boolean def) {
return hasPermission(player, permissionNode.getNode(), def);
return hasPermission(player, permissionNode.getNode(), def)
|| hasPermission(player, permissionNode.getWildcardNode(), def);
}
public boolean hasPermission(Player player, Iterable<PermissionNode> nodes, boolean def) {

View File

@ -83,23 +83,13 @@ public enum PlayerPermission implements PermissionNode {
/**
* Permission to use all player (non-admin) commands.
*/
ALL_COMMANDS("authme.player.*");
PLAYER_ALL("authme.player.*");
/**
* Permission node.
* The permission node.
*/
private String node;
/**
* Get the permission node.
*
* @return Permission node.
*/
@Override
public String getNode() {
return node;
}
/**
* Constructor.
*
@ -108,4 +98,14 @@ public enum PlayerPermission implements PermissionNode {
PlayerPermission(String node) {
this.node = node;
}
@Override
public String getNode() {
return node;
}
@Override
public PermissionNode getWildcardNode() {
return PLAYER_ALL;
}
}