mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-06-23 13:14:47 +02:00
spigot: Add Vault permissions provider
This allows performing permissions checks using any plugin that implements the Vault interfaces without having to provide direct support, including for offline players.
This commit is contained in:
parent
aee27a10d4
commit
23e1bd2c59
|
@ -1,11 +1,18 @@
|
|||
|
||||
description = 'dynmap'
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
url 'https://jitpack.io'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile group: 'org.bukkit', name: 'bukkit', version:'1.7.10-R0.1-SNAPSHOT'
|
||||
compile 'com.nijikokun.bukkit:Permissions:3.1.6'
|
||||
compile 'me.lucko.luckperms:luckperms-api:4.3'
|
||||
compile 'net.luckperms:api:5.0'
|
||||
compile('com.github.MilkBowl:VaultAPI:1.7') { transitive = false }
|
||||
compile project(":dynmap-api")
|
||||
compile project(path: ":DynmapCore", configuration: "shadow")
|
||||
compile group: 'ru.tehkode', name: 'PermissionsEx', version:'1.19.1'
|
||||
|
|
|
@ -89,6 +89,7 @@ import org.dynmap.bukkit.permissions.PEXPermissions;
|
|||
import org.dynmap.bukkit.permissions.PermBukkitPermissions;
|
||||
import org.dynmap.bukkit.permissions.GroupManagerPermissions;
|
||||
import org.dynmap.bukkit.permissions.PermissionProvider;
|
||||
import org.dynmap.bukkit.permissions.VaultPermissions;
|
||||
import org.dynmap.bukkit.permissions.bPermPermissions;
|
||||
import org.dynmap.bukkit.permissions.LuckPermsPermissions;
|
||||
import org.dynmap.bukkit.permissions.LuckPerms5Permissions;
|
||||
|
@ -854,6 +855,7 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
|
|||
perdefs.put(p.getName(), p.getDefault() == PermissionDefault.TRUE);
|
||||
}
|
||||
|
||||
|
||||
permissions = PEXPermissions.create(getServer(), "dynmap");
|
||||
if (permissions == null)
|
||||
permissions = bPermPermissions.create(getServer(), "dynmap", perdefs);
|
||||
|
@ -867,6 +869,8 @@ public class DynmapPlugin extends JavaPlugin implements DynmapAPI {
|
|||
permissions = LuckPermsPermissions.create(getServer(), "dynmap");
|
||||
if (permissions == null)
|
||||
permissions = LuckPerms5Permissions.create(getServer(), "dynmap");
|
||||
if (permissions == null)
|
||||
permissions = VaultPermissions.create(this, "dynmap");
|
||||
if (permissions == null)
|
||||
permissions = BukkitPermissions.create("dynmap", perdefs);
|
||||
if (permissions == null)
|
||||
|
|
|
@ -0,0 +1,90 @@
|
|||
package org.dynmap.bukkit.permissions;
|
||||
|
||||
import net.milkbowl.vault.permission.Permission;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.server.ServiceRegisterEvent;
|
||||
import org.bukkit.plugin.RegisteredServiceProvider;
|
||||
import org.dynmap.Log;
|
||||
import org.dynmap.bukkit.DynmapPlugin;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class VaultPermissions implements PermissionProvider, Listener {
|
||||
private RegisteredServiceProvider<Permission> permissionProvider;
|
||||
private final String prefix;
|
||||
|
||||
public static VaultPermissions create(DynmapPlugin plugin, String name) {
|
||||
try {
|
||||
Class.forName("net.milkbowl.vault.permission.Permission");
|
||||
} catch (ClassNotFoundException cnfx) {
|
||||
return null;
|
||||
}
|
||||
|
||||
RegisteredServiceProvider<Permission> provider = plugin.getServer().getServicesManager().getRegistration(Permission.class);
|
||||
if (provider == null || provider.getProvider() == null)
|
||||
return null;
|
||||
|
||||
Log.info("Using Vault provider " + provider.getProvider().getName() + " for access control");
|
||||
VaultPermissions ret = new VaultPermissions(name, provider);
|
||||
plugin.getServer().getPluginManager().registerEvents(ret, plugin);
|
||||
return ret;
|
||||
}
|
||||
|
||||
private VaultPermissions(String prefix, RegisteredServiceProvider<Permission> initialProvider) {
|
||||
this.prefix = prefix;
|
||||
this.permissionProvider = initialProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the used permission provider if a new one becomes available
|
||||
*
|
||||
* @param event The event with new service registration details
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
@EventHandler
|
||||
public void onServiceRegister(ServiceRegisterEvent event) {
|
||||
if (event.getProvider().getService().equals(Permission.class)) {
|
||||
RegisteredServiceProvider<Permission> newProvider = (RegisteredServiceProvider<Permission>) event.getProvider().getProvider();
|
||||
if (newProvider != this.permissionProvider && newProvider.getPriority().compareTo(this.permissionProvider.getPriority()) >= 0) {
|
||||
this.permissionProvider = newProvider;
|
||||
Log.info("Using Vault provider " + this.permissionProvider.getProvider().getName() + " for access control");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean has(CommandSender sender, String permission) {
|
||||
return permissionProvider.getProvider().has(sender, processPermission(permission));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> hasOfflinePermissions(String playerName, Set<String> perms) {
|
||||
final Permission vault = this.permissionProvider.getProvider();
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(playerName);
|
||||
|
||||
Set<String> hasperms = new HashSet<>();
|
||||
|
||||
for (String perm : perms) {
|
||||
if (vault.playerHas(null, player, processPermission(perm))) {
|
||||
hasperms.add(perm);
|
||||
}
|
||||
}
|
||||
|
||||
return hasperms;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasOfflinePermission(String playerName, String perm) {
|
||||
OfflinePlayer player = Bukkit.getOfflinePlayer(playerName);
|
||||
return permissionProvider.getProvider().playerHas(null, player, processPermission(perm));
|
||||
}
|
||||
|
||||
private String processPermission(String perm) {
|
||||
return prefix + "." + perm;
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@ main: org.dynmap.bukkit.DynmapPlugin
|
|||
version: "${version}-${buildnumber}"
|
||||
authors: [mikeprimm]
|
||||
website: "https://forums.dynmap.us"
|
||||
softdepend: [ Permissions, PermissionEx, bPermissions, PermissionsBukkit, GroupManager, LuckPerms ]
|
||||
softdepend: [ Permissions, PermissionEx, bPermissions, PermissionsBukkit, GroupManager, LuckPerms, Vault ]
|
||||
commands:
|
||||
dynmap:
|
||||
description: Controls Dynmap.
|
||||
|
|
Loading…
Reference in New Issue
Block a user