From 8f9d2c01c2bf9a90c4daa345abd441d693c90c06 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Sat, 24 Mar 2012 23:29:31 -0500 Subject: [PATCH] Add player permissions check API --- .../java/org/dynmap/bukkit/DynmapPlugin.java | 14 ++++++++++++ .../bukkit/permissions/BukkitPermissions.java | 20 +++++++++++++++++ .../permissions/NijikokunPermissions.java | 19 ++++++++++++++++ .../bukkit/permissions/OpPermissions.java | 5 +++++ .../bukkit/permissions/PEXPermissions.java | 18 +++++++++++++++ .../permissions/PermBukkitPermissions.java | 21 ++++++++++++++++++ .../permissions/PermissionProvider.java | 4 ++++ .../bukkit/permissions/bPermPermissions.java | 22 ++++++++++++++++++- 8 files changed, 122 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/dynmap/bukkit/DynmapPlugin.java b/src/main/java/org/dynmap/bukkit/DynmapPlugin.java index d017cdb9..0e93a880 100644 --- a/src/main/java/org/dynmap/bukkit/DynmapPlugin.java +++ b/src/main/java/org/dynmap/bukkit/DynmapPlugin.java @@ -276,6 +276,20 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI { } return null; } + @Override + public Set checkPlayerPermissions(String player, Set perms) { + OfflinePlayer p = getServer().getOfflinePlayer(player); + if(p.isBanned()) + return new HashSet(); + Set rslt = permissions.hasOfflinePermissions(player, perms); + if (rslt == null) { + rslt = new HashSet(); + if(p.isOp()) { + rslt.addAll(perms); + } + } + return rslt; + } } /** * 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 551fb7a6..6e6b0f98 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/BukkitPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/BukkitPermissions.java @@ -1,5 +1,10 @@ package org.dynmap.bukkit.permissions; +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.dynmap.Log; @@ -28,4 +33,19 @@ public class BukkitPermissions implements PermissionProvider { ? player.hasPermission(name + "." + permission) || player.hasPermission(name + ".*") : true; } + @Override + public Set hasOfflinePermissions(String player, Set perms) { + Player p = Bukkit.getPlayerExact(name); + HashSet hasperms = null; + if (p != null) { + hasperms = new HashSet(); + for(String perm : perms) { + if (p.hasPermission(perm)) { + hasperms.add(perm); + } + } + } + return hasperms; + } + } diff --git a/src/main/java/org/dynmap/bukkit/permissions/NijikokunPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/NijikokunPermissions.java index a21f8a67..54f822ae 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/NijikokunPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/NijikokunPermissions.java @@ -1,5 +1,9 @@ package org.dynmap.bukkit.permissions; +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.Bukkit; import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -38,4 +42,19 @@ public class NijikokunPermissions implements PermissionProvider { ? permissions.has(player, name + "." + permission) || permissions.has(player, name + ".*") : true; } + + @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); + } + } + } + return hasperms; + } } diff --git a/src/main/java/org/dynmap/bukkit/permissions/OpPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/OpPermissions.java index 60590939..b24f7e25 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/OpPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/OpPermissions.java @@ -1,6 +1,7 @@ package org.dynmap.bukkit.permissions; import java.util.HashSet; +import java.util.Set; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -24,4 +25,8 @@ public class OpPermissions implements PermissionProvider { : true : true; } + @Override + public Set hasOfflinePermissions(String player, Set perms) { + return null; + } } diff --git a/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java index 07149d31..d22e3b02 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/PEXPermissions.java @@ -1,5 +1,8 @@ package org.dynmap.bukkit.permissions; +import java.util.HashSet; +import java.util.Set; + import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -7,6 +10,7 @@ import org.bukkit.plugin.Plugin; import org.dynmap.Log; import ru.tehkode.permissions.PermissionManager; +import ru.tehkode.permissions.PermissionUser; import ru.tehkode.permissions.bukkit.PermissionsEx; public class PEXPermissions implements PermissionProvider { @@ -34,4 +38,18 @@ public class PEXPermissions implements PermissionProvider { Player player = sender instanceof Player ? (Player) sender : null; return (player != null) ? pm.has(player, name + "." + permission) : true; } + + @Override + public Set hasOfflinePermissions(String player, Set perms) { + HashSet hasperms = new HashSet(); + PermissionUser pu = pm.getUser(player); + if(pu != null) { + for (String pp : perms) { + if (pu.has(pp)) { + hasperms.add(pp); + } + } + } + return hasperms; + } } diff --git a/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java index 21bc54b2..7c5c43da 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/PermBukkitPermissions.java @@ -1,5 +1,9 @@ package org.dynmap.bukkit.permissions; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -9,6 +13,10 @@ import org.dynmap.Log; import com.nijiko.permissions.PermissionHandler; import com.platymuus.bukkit.permissions.PermissionsPlugin; +import de.bananaco.bpermissions.api.ApiLayer; +import de.bananaco.bpermissions.api.util.CalculableType; +import de.bananaco.bpermissions.api.util.Permission; + public class PermBukkitPermissions implements PermissionProvider { String name; PermissionsPlugin plugin; @@ -33,4 +41,17 @@ public class PermBukkitPermissions implements PermissionProvider { Player player = sender instanceof Player ? (Player) sender : null; return (player != null) ? plugin.getPlayerInfo(player.getName()).getPermissions().containsKey(name + "." + permission) : true; } + + @Override + public Set hasOfflinePermissions(String player, Set perms) { + Map prm = plugin.getPlayerInfo(player).getPermissions(); + HashSet hasperms = new HashSet(); + for (String pp : perms) { + Boolean pb = prm.get(pp); + if ((pb != null) && pb.booleanValue()) { + hasperms.add(pp); + } + } + return hasperms; + } } diff --git a/src/main/java/org/dynmap/bukkit/permissions/PermissionProvider.java b/src/main/java/org/dynmap/bukkit/permissions/PermissionProvider.java index 3b4d9994..55a565f2 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/PermissionProvider.java +++ b/src/main/java/org/dynmap/bukkit/permissions/PermissionProvider.java @@ -1,7 +1,11 @@ package org.dynmap.bukkit.permissions; +import java.util.Set; + import org.bukkit.command.CommandSender; public interface PermissionProvider { boolean has(CommandSender sender, String permission); + + Set hasOfflinePermissions(String player, Set perms); } diff --git a/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java b/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java index e5643139..aea41fb9 100644 --- a/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java +++ b/src/main/java/org/dynmap/bukkit/permissions/bPermPermissions.java @@ -1,5 +1,9 @@ package org.dynmap.bukkit.permissions; +import java.util.HashSet; +import java.util.Set; + +import org.bukkit.Bukkit; import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -10,9 +14,11 @@ import ru.tehkode.permissions.bukkit.PermissionsEx; import de.bananaco.bpermissions.api.ApiLayer; import de.bananaco.bpermissions.api.util.CalculableType; +import de.bananaco.bpermissions.api.util.Permission; public class bPermPermissions implements PermissionProvider { String name; + String defworld; public static bPermPermissions create(Server server, String name) { Plugin permissionsPlugin = server.getPluginManager().getPlugin("bPermissions"); @@ -25,11 +31,25 @@ public class bPermPermissions implements PermissionProvider { public bPermPermissions(String name) { this.name = name; + defworld = Bukkit.getServer().getWorlds().get(0).getName(); } @Override public boolean has(CommandSender sender, String permission) { Player player = sender instanceof Player ? (Player) sender : null; - return (player != null) ? ApiLayer.hasPermission(player.getWorld().getName(), CalculableType.USER, player.getName(), name + "." + permission) : true; + return (player != null) ? ApiLayer.hasPermission(defworld, CalculableType.USER, player.getName(), name + "." + permission) : true; } + + @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()); + } + } + return hasperms; + } + }