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();
   }
}