From 3ed44ee905b1fda9fa2d479e2a0c03115a8aa354 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Sun, 25 Mar 2012 14:29:49 -0500 Subject: [PATCH] Add dynmap.webchat permission - option to restrict webchat rights --- .../java/org/dynmap/bukkit/DynmapPlugin.java | 7 +++++++ .../bukkit/permissions/BukkitPermissions.java | 10 +++++++++- .../permissions/NijikokunPermissions.java | 20 +++++++++++-------- .../bukkit/permissions/OpPermissions.java | 4 ++++ .../bukkit/permissions/PEXPermissions.java | 10 +++++++++- .../permissions/PermBukkitPermissions.java | 10 +++++++++- .../permissions/PermissionProvider.java | 3 +++ .../bukkit/permissions/bPermPermissions.java | 12 +++++++---- src/main/resources/plugin.yml | 4 +++- 9 files changed, 64 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/dynmap/bukkit/DynmapPlugin.java b/src/main/java/org/dynmap/bukkit/DynmapPlugin.java index 0e93a880..8d9a9a6e 100644 --- a/src/main/java/org/dynmap/bukkit/DynmapPlugin.java +++ b/src/main/java/org/dynmap/bukkit/DynmapPlugin.java @@ -290,6 +290,13 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI { } return rslt; } + @Override + public boolean checkPlayerPermission(String player, String perm) { + OfflinePlayer p = getServer().getOfflinePlayer(player); + if(p.isBanned()) + return false; + return permissions.hasOfflinePermission(player, perm); + } } /** * Player access abstraction class diff --git a/src/main/java/org/dynmap/bukkit/permissions/BukkitPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/BukkitPermissions.java index 6e6b0f98..0ccec8e2 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/BukkitPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/BukkitPermissions.java @@ -40,7 +40,7 @@ public class BukkitPermissions implements PermissionProvider { if (p != null) { hasperms = new HashSet(); for(String perm : perms) { - if (p.hasPermission(perm)) { + if (p.hasPermission(name + "." + perm)) { hasperms.add(perm); } } @@ -48,4 +48,12 @@ public class BukkitPermissions implements PermissionProvider { return hasperms; } + @Override + public boolean hasOfflinePermission(String player, String perm) { + Player p = Bukkit.getPlayerExact(name); + if (p != null) + return p.hasPermission(name + "." + perm); + else + return false; + } } diff --git a/src/main/java/org/dynmap/bukkit/permissions/NijikokunPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/NijikokunPermissions.java index 54f822ae..4a73b944 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/NijikokunPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/NijikokunPermissions.java @@ -17,6 +17,7 @@ public class NijikokunPermissions implements PermissionProvider { String name; PermissionHandler permissions; Plugin plugin; + String defworld; public static NijikokunPermissions create(Server server, String name) { Plugin permissionsPlugin = server.getPluginManager().getPlugin("Permissions"); @@ -31,6 +32,7 @@ public class NijikokunPermissions implements PermissionProvider { public NijikokunPermissions(Plugin permissionsPlugin, String name) { this.name = name; plugin = permissionsPlugin; + defworld = Bukkit.getServer().getWorlds().get(0).getName(); } @Override @@ -45,16 +47,18 @@ public class NijikokunPermissions implements PermissionProvider { @Override public Set hasOfflinePermissions(String player, Set perms) { - HashSet hasperms = null; - Player plyr = Bukkit.getPlayerExact(player); - if(plyr != null) { - hasperms = new HashSet(); - for (String pp : perms) { - if (permissions.has(plyr, pp)) { - hasperms.add(pp); - } + HashSet hasperms = new HashSet(); + for (String pp : perms) { + if (permissions.has(defworld, player, name + "." + pp)) { + hasperms.add(pp); } } return hasperms; } + + @Override + public boolean hasOfflinePermission(String player, String perm) { + return permissions.has(defworld, player, name + "." + perm); + } + } diff --git a/src/main/java/org/dynmap/bukkit/permissions/OpPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/OpPermissions.java index b24f7e25..80643253 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/OpPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/OpPermissions.java @@ -29,4 +29,8 @@ public class OpPermissions implements PermissionProvider { public Set hasOfflinePermissions(String player, Set perms) { return null; } + @Override + public boolean hasOfflinePermission(String player, String perm) { + return false; + } } diff --git a/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java index d22e3b02..a32c4444 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java @@ -45,11 +45,19 @@ public class PEXPermissions implements PermissionProvider { PermissionUser pu = pm.getUser(player); if(pu != null) { for (String pp : perms) { - if (pu.has(pp)) { + if (pu.has(name + "." + pp)) { hasperms.add(pp); } } } return hasperms; } + @Override + public boolean hasOfflinePermission(String player, String perm) { + PermissionUser pu = pm.getUser(player); + if(pu != null) { + return pu.has(name + "." + perm); + } + return false; + } } diff --git a/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java index 7c5c43da..b0a870bf 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java @@ -47,11 +47,19 @@ public class PermBukkitPermissions implements PermissionProvider { Map prm = plugin.getPlayerInfo(player).getPermissions(); HashSet hasperms = new HashSet(); for (String pp : perms) { - Boolean pb = prm.get(pp); + Boolean pb = prm.get(name + "." + pp); if ((pb != null) && pb.booleanValue()) { hasperms.add(pp); } } return hasperms; } + @Override + public boolean hasOfflinePermission(String player, String perm) { + Boolean b = plugin.getPlayerInfo(player).getPermissions().get(name + "." + perm); + if (b != null) + return b; + else + return false; + } } diff --git a/src/main/java/org/dynmap/bukkit/permissions/PermissionProvider.java b/src/main/java/org/dynmap/bukkit/permissions/PermissionProvider.java index 55a565f2..bf05e8e6 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/PermissionProvider.java +++ b/src/main/java/org/dynmap/bukkit/permissions/PermissionProvider.java @@ -8,4 +8,7 @@ public interface PermissionProvider { boolean has(CommandSender sender, String permission); Set hasOfflinePermissions(String player, Set perms); + + boolean hasOfflinePermission(String player, String perm); + } diff --git a/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java index aea41fb9..36240ee1 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java @@ -42,14 +42,18 @@ public class bPermPermissions implements PermissionProvider { @Override public Set hasOfflinePermissions(String player, Set perms) { - Permission[] p = ApiLayer.getPermissions(defworld, CalculableType.USER, player); HashSet hasperms = new HashSet(); - for (int i = 0; i < p.length; i++) { - if (p[i].isTrue() && perms.contains(p[i].name())) { - hasperms.add(p[i].name()); + for (String pp : perms) { + if(ApiLayer.hasPermission(defworld, CalculableType.USER, player, name + "." + pp)) { + hasperms.add(pp); } } return hasperms; } + @Override + public boolean hasOfflinePermission(String player, String perm) { + return ApiLayer.hasPermission(defworld, CalculableType.USER, player, name + "." + perm); + } + } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 8621cf55..a674ea8f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -317,4 +317,6 @@ permissions: dynmap.dmap.lightinglist: description: Allows /dmap lightinglist default: op - + dynmap.webchat: + description: Allows web chat (if login required for webchat) + default: true