mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2025-03-02 11:31:13 +01:00
pass and account for the holder type when building PermissionCalculators
This commit is contained in:
parent
fb92fd9357
commit
f793fd5010
@ -41,6 +41,7 @@ import me.lucko.luckperms.common.processors.MapProcessor;
|
||||
import me.lucko.luckperms.common.processors.PermissionProcessor;
|
||||
import me.lucko.luckperms.common.processors.RegexProcessor;
|
||||
import me.lucko.luckperms.common.processors.WildcardProcessor;
|
||||
import me.lucko.luckperms.common.references.HolderType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -66,7 +67,7 @@ public class BukkitCalculatorFactory extends AbstractCalculatorFactory {
|
||||
processors.add(new WildcardProcessor());
|
||||
}
|
||||
|
||||
if (plugin.getConfiguration().get(ConfigKeys.APPLY_BUKKIT_DEFAULT_PERMISSIONS)) {
|
||||
if (plugin.getConfiguration().get(ConfigKeys.APPLY_BUKKIT_DEFAULT_PERMISSIONS) && metadata.getHolderType() == HolderType.USER) {
|
||||
processors.add(new DefaultsProcessor(contexts.isOp(), plugin.getDefaultsProvider()));
|
||||
}
|
||||
|
||||
|
@ -39,6 +39,7 @@ import me.lucko.luckperms.api.caching.MetaContexts;
|
||||
import me.lucko.luckperms.common.caching.type.MetaAccumulator;
|
||||
import me.lucko.luckperms.common.caching.type.MetaCache;
|
||||
import me.lucko.luckperms.common.caching.type.PermissionCache;
|
||||
import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata;
|
||||
import me.lucko.luckperms.common.config.ConfigKeys;
|
||||
import me.lucko.luckperms.common.metastacking.SimpleMetaStack;
|
||||
import me.lucko.luckperms.common.model.PermissionHolder;
|
||||
@ -85,7 +86,8 @@ public abstract class HolderCachedData<T extends PermissionHolder> implements Ca
|
||||
*/
|
||||
private PermissionCache calculatePermissions(@NonNull Contexts contexts, PermissionCache data) {
|
||||
if (data == null) {
|
||||
data = new PermissionCache(contexts, getHolderName(), holder.getPlugin().getCalculatorFactory());
|
||||
PermissionCalculatorMetadata metadata = PermissionCalculatorMetadata.of(holder.getType(), getHolderName(), contexts.getContexts());
|
||||
data = new PermissionCache(contexts, metadata, holder.getPlugin().getCalculatorFactory());
|
||||
}
|
||||
|
||||
if (contexts == Contexts.allowAll()) {
|
||||
|
@ -61,12 +61,10 @@ public class PermissionCache implements PermissionData {
|
||||
*/
|
||||
private final PermissionCalculator calculator;
|
||||
|
||||
public PermissionCache(Contexts contexts, String friendlyName, CalculatorFactory calculatorFactory) {
|
||||
public PermissionCache(Contexts contexts, PermissionCalculatorMetadata metadata, CalculatorFactory calculatorFactory) {
|
||||
permissions = new ConcurrentHashMap<>();
|
||||
permissionsUnmodifiable = Collections.unmodifiableMap(permissions);
|
||||
|
||||
PermissionCalculatorMetadata metadata = PermissionCalculatorMetadata.of(friendlyName, contexts.getContexts());
|
||||
|
||||
calculator = calculatorFactory.build(contexts, metadata);
|
||||
calculator.updateBacking(permissions); // Initial setup.
|
||||
}
|
||||
|
@ -29,11 +29,17 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import me.lucko.luckperms.api.context.ContextSet;
|
||||
import me.lucko.luckperms.common.references.HolderType;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor(staticName = "of")
|
||||
public class PermissionCalculatorMetadata {
|
||||
|
||||
/**
|
||||
* The type of the object which owns the permission calculator
|
||||
*/
|
||||
private final HolderType holderType;
|
||||
|
||||
/**
|
||||
* The name of the object which owns the permission calculator
|
||||
*/
|
||||
|
@ -38,9 +38,11 @@ import me.lucko.luckperms.common.processors.MapProcessor;
|
||||
import me.lucko.luckperms.common.processors.PermissionProcessor;
|
||||
import me.lucko.luckperms.common.processors.RegexProcessor;
|
||||
import me.lucko.luckperms.common.processors.WildcardProcessor;
|
||||
import me.lucko.luckperms.common.references.HolderType;
|
||||
import me.lucko.luckperms.sponge.LPSpongePlugin;
|
||||
import me.lucko.luckperms.sponge.processors.DefaultsProcessor;
|
||||
import me.lucko.luckperms.sponge.processors.GroupDefaultsProcessor;
|
||||
import me.lucko.luckperms.sponge.processors.SpongeWildcardProcessor;
|
||||
import me.lucko.luckperms.sponge.processors.UserDefaultsProcessor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -67,7 +69,11 @@ public class SpongeCalculatorFactory extends AbstractCalculatorFactory {
|
||||
}
|
||||
|
||||
if (plugin.getConfiguration().get(ConfigKeys.APPLY_SPONGE_DEFAULT_SUBJECTS)) {
|
||||
processors.add(new DefaultsProcessor(plugin.getService(), contexts.getContexts().makeImmutable()));
|
||||
if (metadata.getHolderType() == HolderType.USER) {
|
||||
processors.add(new UserDefaultsProcessor(plugin.getService(), contexts.getContexts().makeImmutable()));
|
||||
} else if (metadata.getHolderType() == HolderType.GROUP) {
|
||||
processors.add(new GroupDefaultsProcessor(plugin.getService(), contexts.getContexts().makeImmutable()));
|
||||
}
|
||||
}
|
||||
|
||||
return registerCalculator(new PermissionCalculator(plugin, metadata, processors.build()));
|
||||
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (c) 2017 Lucko (Luck) <luck@lucko.me>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package me.lucko.luckperms.sponge.processors;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
|
||||
import me.lucko.luckperms.api.Tristate;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.common.processors.PermissionProcessor;
|
||||
import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class GroupDefaultsProcessor implements PermissionProcessor {
|
||||
private final LuckPermsService service;
|
||||
private final ImmutableContextSet contexts;
|
||||
|
||||
@Override
|
||||
public Tristate hasPermission(String permission) {
|
||||
Tristate t = service.getGroupSubjects().getDefaults().getPermissionValue(contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
}
|
||||
|
||||
t = service.getDefaults().getPermissionValue(contexts, permission);
|
||||
if (t != Tristate.UNDEFINED) {
|
||||
return t;
|
||||
}
|
||||
|
||||
return Tristate.UNDEFINED;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBacking(Map<String, Boolean> map) {
|
||||
// Do nothing, this doesn't use the backing
|
||||
}
|
||||
}
|
@ -35,7 +35,7 @@ import me.lucko.luckperms.sponge.service.LuckPermsService;
|
||||
import java.util.Map;
|
||||
|
||||
@AllArgsConstructor
|
||||
public class DefaultsProcessor implements PermissionProcessor {
|
||||
public class UserDefaultsProcessor implements PermissionProcessor {
|
||||
private final LuckPermsService service;
|
||||
private final ImmutableContextSet contexts;
|
||||
|
@ -42,6 +42,7 @@ import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata;
|
||||
import me.lucko.luckperms.common.contexts.ContextSetComparator;
|
||||
import me.lucko.luckperms.common.processors.MapProcessor;
|
||||
import me.lucko.luckperms.common.processors.PermissionProcessor;
|
||||
import me.lucko.luckperms.common.references.HolderType;
|
||||
import me.lucko.luckperms.common.verbose.CheckOrigin;
|
||||
import me.lucko.luckperms.sponge.processors.SpongeWildcardProcessor;
|
||||
import me.lucko.luckperms.sponge.service.model.LPPermissionService;
|
||||
@ -84,7 +85,7 @@ public class CalculatedSubjectData implements LPSubjectData {
|
||||
processors.add(new MapProcessor());
|
||||
processors.add(new SpongeWildcardProcessor());
|
||||
|
||||
CalculatorHolder holder = new CalculatorHolder(new PermissionCalculator(service.getPlugin(), PermissionCalculatorMetadata.of(calculatorDisplayName, contexts), processors.build()));
|
||||
CalculatorHolder holder = new CalculatorHolder(new PermissionCalculator(service.getPlugin(), PermissionCalculatorMetadata.of(HolderType.GROUP, calculatorDisplayName, contexts), processors.build()));
|
||||
holder.setPermissions(flattenMap(getRelevantEntries(contexts, permissions)));
|
||||
|
||||
return holder;
|
||||
|
Loading…
Reference in New Issue
Block a user