PermissionsModule class
Пакет: com.hypixel.hytale.server.core.permissions
Файл: com/hypixel/hytale/server/core/permissions/PermissionsModule.java
extends: JavaPlugin
Поля (26)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
|
instance |
|
CommandRegistry |
var1 |
|
Map |
var1 |
|
PlayerRef |
var1 |
|
Set |
var1 |
|
Boolean |
var10 |
|
Set |
var11 |
|
Boolean |
var12 |
|
Boolean |
var13 |
|
Set |
var2 |
|
Set |
var2 |
|
|
var2 |
|
Set |
var2 |
|
|
var2 |
|
Set |
var3 |
|
Set |
var3 |
|
Set |
var3 |
|
String |
var4 |
|
|
var4 |
|
Set |
var5 |
|
Set |
var5 |
|
Boolean |
var6 |
|
Boolean |
var6 |
|
Set |
var7 |
|
Boolean |
var8 |
Методы (51)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Invalid permission node: " + var0) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Invalid group name: " + var5) |
public |
void |
addGroupPermissionvoid addGroupPermission(@Nonnull String var1, @Nonnull Set<String> var2) |
public |
void |
addProvidervoid addProvider(@Nonnull PermissionProvider var1) |
public |
void |
addUserPermissionvoid addUserPermission(@Nonnull UUID var1, @Nonnull Set<String> var2) |
public |
void |
addUserToGroupvoid addUserToGroup(@Nonnull UUID var1, @Nonnull String var2) |
public |
boolean |
areProvidersTamperedboolean areProvidersTampered() |
|
|
for for(String var5 : var1) |
|
|
for for(UUID var5 : var3) |
|
|
for for(PermissionProvider var5 : this.providers) |
|
|
for for(UUID var7 : var3) |
|
|
for for(PermissionProvider var4 : this.providers) |
|
|
for for(PermissionProvider var4 : this.providers) |
|
|
for for(PermissionProvider var4 : this.providers) |
|
|
for for(String var5 : var3) |
|
|
for for(PermissionProvider var4 : this.providers) |
|
|
for for(PermissionProvider var3 : this.providers) |
|
|
for for(PermissionProvider var5 : this.providers) |
|
|
for for(int var5 = 0; var4 != null && var5 < 32; var5++) |
|
|
for for(int var2 = var1.denyWildcards.length - 1; var2 >= 0; var2--) |
|
|
for for(String var5 : var1.wildcards) |
static |
PermissionsModule |
getPermissionsModule get() |
public |
PermissionProvider |
getFirstPermissionProviderPermissionProvider getFirstPermissionProvider() |
public |
boolean |
hasPermissionboolean hasPermission(@Nonnull UUID var1, @Nonnull String var2) |
public |
boolean |
hasPermissionboolean hasPermission(@Nonnull UUID var1, @Nonnull String var2, boolean var3) |
public |
boolean |
hasPermissionboolean hasPermission(@Nonnull UUID var1, @Nonnull PermissionQuery var2) |
public |
boolean |
hasPermissionboolean hasPermission(@Nonnull UUID var1, @Nonnull PermissionQuery var2, boolean var3) |
public |
boolean |
hasUserGrantboolean hasUserGrant(@Nonnull UUID var1, @Nonnull String var2) |
|
|
if if(var2 == null) |
|
|
if if(var2 == null) |
|
|
if if(var6 != null) |
|
|
if if(var10 != null) |
|
|
if if(var12 != null) |
|
|
if if(var13 != null) |
|
|
if if(var6 != null) |
|
|
if if(var8 != null) |
|
|
if if(var4 == null) |
public |
void |
refreshVirtualGroupsvoid refreshVirtualGroups() |
static |
void |
registerPermissionvoid registerPermission(@Nonnull String var0) |
static |
void |
registerPermissionvoid registerPermission(@Nonnull String var0, @Nonnull String... var1) |
public |
void |
reloadvoid reload() |
public |
void |
removeGroupPermissionvoid removeGroupPermission(@Nonnull String var1, @Nonnull Set<String> var2) |
public |
void |
removeProvidervoid removeProvider(@Nonnull PermissionProvider var1) |
public |
void |
removeUserFromGroupvoid removeUserFromGroup(@Nonnull UUID var1, @Nonnull String var2) |
public |
void |
removeUserPermissionvoid removeUserPermission(@Nonnull UUID var1, @Nonnull Set<String> var2) |
static |
void |
resendCommandTreeForPlayervoid resendCommandTreeForPlayer(@Nonnull UUID var0) |
abstract |
|
resendCommandTreeForPlayer resendCommandTreeForPlayer(var1) |
static |
void |
resetForTestingvoid resetForTesting() |
public |
void |
setUserGroupvoid setUserGroup(@Nonnull UUID var1, @Nonnull String var2) |
public |
void |
setVirtualGroupsvoid setVirtualGroups(@Nonnull Map<String, Set<String>> var1) |
abstract |
|
super super(var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.permissions;
class="kw">import com.hypixel.hytale.common.plugin.PluginManifest;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.HytaleServer;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandManager;
class="kw">import com.hypixel.hytale.server.core.command.system.CommandRegistry;
class="kw">import com.hypixel.hytale.server.core.event.events.permissions.GroupPermissionChangeEvent;
class="kw">import com.hypixel.hytale.server.core.event.events.permissions.PlayerGroupEvent;
class="kw">import com.hypixel.hytale.server.core.event.events.permissions.PlayerPermissionChangeEvent;
class="kw">import com.hypixel.hytale.server.core.io.handlers.game.GamePacketHandler;
class="kw">import com.hypixel.hytale.server.core.permissions.commands.PermCommand;
class="kw">import com.hypixel.hytale.server.core.permissions.commands.SetGroupCommand;
class="kw">import com.hypixel.hytale.server.core.permissions.commands.op.OpCommand;
class="kw">import com.hypixel.hytale.server.core.permissions.provider.HytalePermissionsProvider;
class="kw">import com.hypixel.hytale.server.core.permissions.provider.PermissionProvider;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPlugin;
class="kw">import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectMaps;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import java.util.Collection;
class="kw">import java.util.Collections;
class="kw">import java.util.HashSet;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import java.util.UUID;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.concurrent.CopyOnWriteArrayList;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class PermissionsModule class="kw">extends JavaPlugin {
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">public class="kw">static class="kw">final String ROOT = "*";
@Nonnull
class="kw">public class="kw">static class="kw">final String ROOT_DENY = "-*";
@Nonnull
class="kw">public class="kw">static class="kw">final PluginManifest MANIFEST = PluginManifest.corePlugin(PermissionsModule.class).build();
class="kw">private class="kw">static PermissionsModule instance;
@Nonnull
class="kw">private class="kw">final HytalePermissionsProvider standardProvider = new HytalePermissionsProvider();
@Nonnull
class="kw">private Map<String, Set<String>> virtualGroups = Object2ObjectMaps.emptyMap();
@Nonnull
class="kw">private class="kw">final List<PermissionProvider> providers = new CopyOnWriteArrayList<>(List.of(this.standardProvider));
@Nonnull
class="kw">private class="kw">static class="kw">final Map<String, Set<String>> registeredPermissions = new ConcurrentHashMap<>();
class="kw">private class="kw">static class="kw">final int MAX_GROUP_DEPTH = 32;
class="kw">public class="kw">static PermissionsModule get() {
class="kw">return instance;
}
class="kw">public PermissionsModule(@Nonnull JavaPluginInit var1) {
super(var1);
instance = this;
}
@Override
class="kw">protected void setup() {
CommandRegistry var1 = this.getCommandRegistry();
var1.registerCommand(new OpCommand());
var1.registerCommand(new PermCommand());
var1.registerCommand(new SetGroupCommand());
}
@Override
class="kw">protected void start() {
this.standardProvider.syncLoad();
this.refreshVirtualGroups();
}
class="kw">public class="kw">static void registerPermission(@Nonnull String var0) {
if (!PermissionValidation.isValidPermissionNode(var0)) {
throw new IllegalArgumentException("Invalid permission node: " + var0);
}
registeredPermissions.computeIfAbsent(var0, var0x -> ConcurrentHashMap.newKeySet());
}
class="kw">public class="kw">static void registerPermission(@Nonnull String var0, @Nonnull String... var1) {
if (!PermissionValidation.isValidPermissionNode(var0)) {
throw new IllegalArgumentException("Invalid permission node: " + var0);
}
for (String var5 : var1) {
if (!PermissionValidation.isValidGroupName(var5)) {
throw new IllegalArgumentException("Invalid group name: " + var5);
}
registeredPermissions.computeIfAbsent(var0, var0x -> ConcurrentHashMap.newKeySet()).add(var5);
}
}
@Nonnull
class="kw">public class="kw">static Map<String, Set<String>> getRegisteredPermissions() {
class="kw">return Collections.unmodifiableMap(registeredPermissions);
}
class="kw">public void refreshVirtualGroups() {
Map var1 = CommandManager.get().createVirtualPermissionGroups();
for (Entry var3 : registeredPermissions.entrySet()) {
for (String var5 : var3.getValue()) {
var1.computeIfAbsent(var5, var0 -> new HashSet<>()).add(var3.getKey());
}
}
this.setVirtualGroups(var1);
}
class="kw">public void reload() {
this.standardProvider.syncLoad();
this.refreshVirtualGroups();
}
class="kw">public void addProvider(@Nonnull PermissionProvider var1) {
this.providers.add(var1);
}
class="kw">public void removeProvider(@Nonnull PermissionProvider var1) {
this.providers.remove(var1);
}
@Nonnull
class="kw">public List<PermissionProvider> getProviders() {
class="kw">return Collections.unmodifiableList(this.providers);
}
class="kw">public PermissionProvider getFirstPermissionProvider() {
class="kw">return this.providers.getFirst();
}
class="kw">public boolean areProvidersTampered() {
class="kw">return this.providers.size() != 1 || this.providers.getFirst() != this.standardProvider;
}
class="kw">public void addUserPermission(@Nonnull UUID var1, @Nonnull Set<String> var2) {
this.getFirstPermissionProvider().addUserPermissions(var1, var2);
HytaleServer.get()
.getEventBus()
.<Void, PlayerPermissionChangeEvent.PermissionsAdded>dispatchFor(PlayerPermissionChangeEvent.PermissionsAdded.class)
.dispatch(new PlayerPermissionChangeEvent.PermissionsAdded(var1, var2));
}
@Nonnull
class="kw">public Set<UUID> addUserPermission(@Nonnull Collection<UUID> var1, @Nonnull Set<String> var2) {
Set var3 = this.getFirstPermissionProvider().addUserPermissions(var1, var2);
for (UUID var5 : var3) {
HytaleServer.get()
.getEventBus()
.<Void, PlayerPermissionChangeEvent.PermissionsAdded>dispatchFor(PlayerPermissionChangeEvent.PermissionsAdded.class)
.dispatch(new PlayerPermissionChangeEvent.PermissionsAdded(var5, var2));
}
class="kw">return var3;
}
@Nonnull
class="kw">public Set<UUID> removeUserPermissionFromAll(@Nonnull String var1) {
Set var2 = Set.of(var1);
Set var3 = new HashSet<>();
for (PermissionProvider var5 : this.providers) {
var3.addAll(var5.removeUserPermissionFromAll(var1));
}
for (UUID var7 : var3) {
HytaleServer.get()
.getEventBus()
.<Void, PlayerPermissionChangeEvent.PermissionsRemoved>dispatchFor(PlayerPermissionChangeEvent.PermissionsRemoved.class)
.dispatch(new PlayerPermissionChangeEvent.PermissionsRemoved(var7, var2));
}
class="kw">return Collections.unmodifiableSet(var3);
}
class="kw">public boolean hasUserGrant(@Nonnull UUID var1, @Nonnull String var2) {
for (PermissionProvider var4 : this.providers) {
if (var4.getUserPermissions(var1).contains(var2)) {
class="kw">return true;
}
}
class="kw">return false;
}
class="kw">public void removeUserPermission(@Nonnull UUID var1, @Nonnull Set<String> var2) {
for (PermissionProvider var4 : this.providers) {
var4.removeUserPermissions(var1, var2);
}
HytaleServer.get()
.getEventBus()
.<Void, PlayerPermissionChangeEvent.PermissionsRemoved>dispatchFor(PlayerPermissionChangeEvent.PermissionsRemoved.class)
.dispatch(new PlayerPermissionChangeEvent.PermissionsRemoved(var1, var2));
}
@Nonnull
class="kw">public Set<UUID> getUsersWithPermission(@Nonnull String var1) {
Set var2 = null;
for (PermissionProvider var4 : this.providers) {
Set var5 = var4.getUsersWithPermission(var1);
if (!var5.isEmpty()) {
if (var2 == null) {
var2 = new HashSet<>();
}
var2.addAll(var5);
}
}
class="kw">return var2 == null ? Collections.emptySet() : Collections.unmodifiableSet(var2);
}
class="kw">public void addGroupPermission(@Nonnull String var1, @Nonnull Set<String> var2) {
this.getFirstPermissionProvider().addGroupPermissions(var1, var2);
HytaleServer.get()
.getEventBus()
.<Void, GroupPermissionChangeEvent.Added>dispatchFor(GroupPermissionChangeEvent.Added.class)
.dispatch(new GroupPermissionChangeEvent.Added(var1, var2));
}
class="kw">public void removeGroupPermission(@Nonnull String var1, @Nonnull Set<String> var2) {
this.getFirstPermissionProvider().removeGroupPermissions(var1, var2);
HytaleServer.get()
.getEventBus()
.<Void, GroupPermissionChangeEvent.Removed>dispatchFor(GroupPermissionChangeEvent.Removed.class)
.dispatch(new GroupPermissionChangeEvent.Removed(var1, var2));
}
class="kw">public void addUserToGroup(@Nonnull UUID var1, @Nonnull String var2) {
this.getFirstPermissionProvider().addUserToGroup(var1, var2);
HytaleServer.get().getEventBus().<Void, PlayerGroupEvent.Added>dispatchFor(PlayerGroupEvent.Added.class).dispatch(new PlayerGroupEvent.Added(var1, var2));
resendCommandTreeForPlayer(var1);
}
class="kw">public void removeUserFromGroup(@Nonnull UUID var1, @Nonnull String var2) {
this.getFirstPermissionProvider().removeUserFromGroup(var1, var2);
HytaleServer.get()
.getEventBus()
.<Void, PlayerGroupEvent.Removed>dispatchFor(PlayerGroupEvent.Removed.class)
.dispatch(new PlayerGroupEvent.Removed(var1, var2));
resendCommandTreeForPlayer(var1);
}
class="kw">public void setUserGroup(@Nonnull UUID var1, @Nonnull String var2) {
Set var3 = this.getGroupsForUser(var1);
this.getFirstPermissionProvider().setUserGroup(var1, var2);
for (String var5 : var3) {
if (!var5.equals(var2)) {
HytaleServer.get()
.getEventBus()
.<Void, PlayerGroupEvent.Removed>dispatchFor(PlayerGroupEvent.Removed.class)
.dispatch(new PlayerGroupEvent.Removed(var1, var5));
}
}
if (!var3.contains(var2)) {
HytaleServer.get()
.getEventBus()
.<Void, PlayerGroupEvent.Added>dispatchFor(PlayerGroupEvent.Added.class)
.dispatch(new PlayerGroupEvent.Added(var1, var2));
}
resendCommandTreeForPlayer(var1);
}
class="kw">private class="kw">static void resendCommandTreeForPlayer(@Nonnull UUID var0) {
PlayerRef var1 = Universe.get().getPlayer(var0);
if (var1 != null && var1.getPacketHandler() class="kw">instanceof GamePacketHandler var3) {
var3.sendCommandTree();
}
}
class="kw">public void setVirtualGroups(@Nonnull Map<String, Set<String>> var1) {
this.virtualGroups = new Object2ObjectOpenHashMap(var1);
}
@Nonnull
class="kw">public Map<String, Set<String>> getVirtualGroups() {
class="kw">return Collections.unmodifiableMap(this.virtualGroups);
}
@Nonnull
class="kw">public Set<String> getGroupsForUser(@Nonnull UUID var1) {
Set var2 = null;
for (PermissionProvider var4 : this.providers) {
Set var5 = var4.getGroupsForUser(var1);
if (!var5.isEmpty()) {
if (var2 == null) {
var2 = new HashSet<>();
}
var2.addAll(var5);
}
}
class="kw">return var2 != null ? Collections.unmodifiableSet(var2) : Collections.emptySet();
}
@Nonnull
class="kw">public Set<String> getAllRegisteredGroups() {
Set var1 = new HashSet<>(this.virtualGroups.keySet());
for (PermissionProvider var3 : this.providers) {
var1.addAll(var3.getAllRegisteredGroups());
}
class="kw">return Collections.unmodifiableSet(var1);
}
class="kw">public boolean hasPermission(@Nonnull UUID var1, @Nonnull String var2) {
class="kw">return this.hasPermission(var1, var2, false);
}
class="kw">public boolean hasPermission(@Nonnull UUID var1, @Nonnull String var2, boolean var3) {
class="kw">return this.hasPermission(var1, PermissionQuery.of(var2), var3);
}
class="kw">public boolean hasPermission(@Nonnull UUID var1, @Nonnull PermissionQuery var2) {
class="kw">return this.hasPermission(var1, var2, false);
}
class="kw">public boolean hasPermission(@Nonnull UUID var1, @Nonnull PermissionQuery var2, boolean var3) {
for (PermissionProvider var5 : this.providers) {
Boolean var6 = hasPermission(var5.getUserPermissions(var1), var2);
if (var6 != null) {
class="kw">return var6;
}
for (String var9 : var5.getGroupsForUser(var1)) {
Boolean var10 = hasPermission(var5.getGroupPermissions(var9), var2);
if (var10 != null) {
class="kw">return var10;
}
Set var11 = this.virtualGroups.get(var9);
Boolean var12 = hasPermission(var11, var2);
if (var12 != null) {
class="kw">return var12;
}
Boolean var13 = this.checkParentChain(var5, var9, var2);
if (var13 != null) {
class="kw">return var13;
}
}
}
class="kw">return var3;
}
@Nullable
class="kw">private Boolean checkParentChain(@Nonnull PermissionProvider var1, @Nonnull String var2, @Nonnull PermissionQuery var3) {
String var4 = var1.getGroupParent(var2);
for (int var5 = 0; var4 != null && var5 < 32; var5++) {
Boolean var6 = hasPermission(var1.getGroupPermissions(var4), var3);
if (var6 != null) {
class="kw">return var6;
}
Set var7 = this.virtualGroups.get(var4);
Boolean var8 = hasPermission(var7, var3);
if (var8 != null) {
class="kw">return var8;
}
var4 = var1.getGroupParent(var4);
}
if (var4 == null) {
class="kw">return null;
}
((HytaleLogger.Api)LOGGER.at(Level.WARNING).atMostEvery(1, TimeUnit.MINUTES))
.log("The parent chain of group '%s' runs past %d groups, so the rest of it decides nothing. Check its parents for a loop", var2, 32);
class="kw">return null;
}
@Nullable
class="kw">public class="kw">static Boolean hasPermission(@Nullable Set<String> var0, @Nonnull String var1) {
if (var0 == null || var0.isEmpty()) {
class="kw">return null;
} else if (var0.contains("-*")) {
class="kw">return Boolean.FALSE;
} else if (var0.contains("-" + var1)) {
class="kw">return Boolean.FALSE;
} else {
class="kw">return var0.contains(var1) ? Boolean.TRUE : hasPermission(var0, PermissionQuery.of(var1));
}
}
@Nullable
class="kw">public class="kw">static Boolean hasPermission(@Nullable Set<String> var0, @Nonnull PermissionQuery var1) {
if (var0 != null && !var0.isEmpty()) {
if (var0.contains("-*")) {
class="kw">return Boolean.FALSE;
}
if (var0.contains(var1.deny)) {
class="kw">return Boolean.FALSE;
}
if (var0.contains(var1.id)) {
class="kw">return Boolean.TRUE;
}
for (int var2 = var1.denyWildcards.length - 1; var2 >= 0; var2--) {
if (var0.contains(var1.denyWildcards[var2])) {
class="kw">return Boolean.FALSE;
}
}
if (var0.contains("*")) {
class="kw">return Boolean.TRUE;
}
for (String var5 : var1.wildcards) {
if (var0.contains(var5)) {
class="kw">return Boolean.TRUE;
}
}
class="kw">return null;
} else {
class="kw">return null;
}
}
class="kw">static void resetForTesting() {
registeredPermissions.clear();
}
}