Search in sources :

Example 51 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class LPPermissionAttachment method setPermissionInternal.

private void setPermissionInternal(String name, boolean value) {
    if (!this.permissible.getPlugin().getConfiguration().get(ConfigKeys.APPLY_NUKKIT_ATTACHMENT_PERMISSIONS)) {
        return;
    }
    // construct a node for the permission being set
    // we use the servers static context to *try* to ensure that the node will apply
    Node node = NodeFactory.builder(name).setValue(value).withExtraContext(this.permissible.getPlugin().getContextManager().getStaticContext()).build();
    // convert the constructed node to a transient node instance to refer back to this attachment
    ImmutableTransientNode<LPPermissionAttachment> transientNode = ImmutableTransientNode.of(node, this);
    // set the transient node
    User user = this.permissible.getUser();
    if (user.setTransientPermission(transientNode).asBoolean()) {
        user.reloadCachedData();
    }
}
Also used : User(me.lucko.luckperms.common.model.User) ImmutableTransientNode(me.lucko.luckperms.common.node.ImmutableTransientNode) Node(me.lucko.luckperms.api.Node)

Example 52 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class HolderSubjectData method getAllParents.

@Override
public ImmutableMap<ImmutableContextSet, ImmutableList<LPSubjectReference>> getAllParents() {
    ImmutableMap.Builder<ImmutableContextSet, ImmutableList<LPSubjectReference>> ret = ImmutableMap.builder();
    for (Map.Entry<ImmutableContextSet, Collection<Node>> entry : this.holder.getNodes(this.type).asMap().entrySet()) {
        ImmutableList.Builder<LPSubjectReference> builder = ImmutableList.builder();
        for (Node n : entry.getValue()) {
            if (n.isGroupNode()) {
                builder.add(this.service.getGroupSubjects().loadSubject(n.getGroupName()).join().toReference());
            }
        }
        ret.put(entry.getKey(), builder.build());
    }
    return ret.build();
}
Also used : ImmutableList(com.google.common.collect.ImmutableList) Node(me.lucko.luckperms.api.Node) Collection(java.util.Collection) LPSubjectReference(me.lucko.luckperms.sponge.service.model.LPSubjectReference) ImmutableContextSet(me.lucko.luckperms.api.context.ImmutableContextSet) HashMap(java.util.HashMap) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) ImmutableMap(com.google.common.collect.ImmutableMap)

Example 53 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class HolderSubjectData method setOption.

@Override
public CompletableFuture<Boolean> setOption(ImmutableContextSet contexts, String key, String value) {
    Objects.requireNonNull(contexts, "contexts");
    Objects.requireNonNull(key, "key");
    Objects.requireNonNull(value, "value");
    Node node;
    if (key.equalsIgnoreCase(NodeFactory.PREFIX_KEY) || key.equalsIgnoreCase(NodeFactory.SUFFIX_KEY)) {
        // special handling.
        ChatMetaType type = ChatMetaType.valueOf(key.toUpperCase());
        // remove all prefixes/suffixes from the user
        List<Node> toRemove = streamNodes().filter(type::matches).filter(n -> n.getFullContexts().equals(contexts)).collect(Collectors.toList());
        toRemove.forEach(n -> this.type.run(() -> this.holder.unsetPermission(n), () -> this.holder.unsetTransientPermission(n)));
        MetaAccumulator metaAccumulator = this.holder.accumulateMeta(null, this.service.getPlugin().getContextManager().formContexts(contexts));
        int priority = metaAccumulator.getChatMeta(type).keySet().stream().mapToInt(e -> e).max().orElse(0);
        priority += 10;
        node = NodeFactory.buildChatMetaNode(type, priority, value).withExtraContext(contexts).build();
    } else {
        // standard remove
        List<Node> toRemove = streamNodes().filter(n -> n.isMeta() && n.getMeta().getKey().equals(key)).filter(n -> n.getFullContexts().equals(contexts)).collect(Collectors.toList());
        toRemove.forEach(n -> this.type.run(() -> this.holder.unsetPermission(n), () -> this.holder.unsetTransientPermission(n)));
        node = NodeFactory.buildMetaNode(key, value).withExtraContext(contexts).build();
    }
    this.type.run(() -> this.holder.setPermission(node), () -> this.holder.setTransientPermission(node));
    return objectSave(this.holder).thenApply(v -> true);
}
Also used : DataMutateResult(me.lucko.luckperms.api.DataMutateResult) LuckPermsService(me.lucko.luckperms.sponge.service.LuckPermsService) Tristate(me.lucko.luckperms.api.Tristate) LPSubject(me.lucko.luckperms.sponge.service.model.LPSubject) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) PermissionService(org.spongepowered.api.service.permission.PermissionService) ImmutableList(com.google.common.collect.ImmutableList) Map(java.util.Map) LPSubjectReference(me.lucko.luckperms.sponge.service.model.LPSubjectReference) SubjectData(org.spongepowered.api.service.permission.SubjectData) ProxyFactory(me.lucko.luckperms.sponge.service.proxy.ProxyFactory) ImmutableMap(com.google.common.collect.ImmutableMap) PermissionHolder(me.lucko.luckperms.common.model.PermissionHolder) Collection(java.util.Collection) ImmutableContextSet(me.lucko.luckperms.api.context.ImmutableContextSet) NodeFactory(me.lucko.luckperms.common.node.NodeFactory) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) LPSubjectData(me.lucko.luckperms.sponge.service.model.LPSubjectData) List(java.util.List) Stream(java.util.stream.Stream) ChatMetaType(me.lucko.luckperms.api.ChatMetaType) Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) NodeMapType(me.lucko.luckperms.common.model.NodeMapType) User(me.lucko.luckperms.common.model.User) MetaAccumulator(me.lucko.luckperms.common.caching.type.MetaAccumulator) MetaAccumulator(me.lucko.luckperms.common.caching.type.MetaAccumulator) Node(me.lucko.luckperms.api.Node) ChatMetaType(me.lucko.luckperms.api.ChatMetaType)

Example 54 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class HolderSubjectData method getAllPermissions.

@Override
public ImmutableMap<ImmutableContextSet, ImmutableMap<String, Boolean>> getAllPermissions() {
    ImmutableMap.Builder<ImmutableContextSet, ImmutableMap<String, Boolean>> ret = ImmutableMap.builder();
    for (Map.Entry<ImmutableContextSet, Collection<Node>> entry : this.holder.getNodes(this.type).asMap().entrySet()) {
        ImmutableMap.Builder<String, Boolean> builder = ImmutableMap.builder();
        for (Node n : entry.getValue()) {
            builder.put(n.getPermission(), n.getValuePrimitive());
        }
        ret.put(entry.getKey(), builder.build());
    }
    return ret.build();
}
Also used : Node(me.lucko.luckperms.api.Node) Collection(java.util.Collection) ImmutableContextSet(me.lucko.luckperms.api.context.ImmutableContextSet) HashMap(java.util.HashMap) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) ImmutableMap(com.google.common.collect.ImmutableMap)

Example 55 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class HolderSubjectData method removeParent.

@Override
public CompletableFuture<Boolean> removeParent(ImmutableContextSet contexts, LPSubjectReference subject) {
    Objects.requireNonNull(contexts, "contexts");
    Objects.requireNonNull(subject, "subject");
    if (!subject.getCollectionIdentifier().equals(PermissionService.SUBJECTS_GROUP)) {
        return CompletableFuture.completedFuture(false);
    }
    Node node = NodeFactory.buildGroupNode(subject.getSubjectIdentifier()).withExtraContext(contexts).build();
    DataMutateResult result = this.type.supply(() -> this.holder.unsetPermission(node), () -> this.holder.unsetTransientPermission(node));
    if (!result.asBoolean()) {
        return CompletableFuture.completedFuture(false);
    }
    return objectSave(this.holder).thenApply(v -> true);
}
Also used : Node(me.lucko.luckperms.api.Node) DataMutateResult(me.lucko.luckperms.api.DataMutateResult)

Aggregations

Node (me.lucko.luckperms.api.Node)56 LocalizedNode (me.lucko.luckperms.api.LocalizedNode)15 Group (me.lucko.luckperms.common.model.Group)15 User (me.lucko.luckperms.common.model.User)13 Map (java.util.Map)12 ImmutableLocalizedNode (me.lucko.luckperms.common.node.ImmutableLocalizedNode)12 List (java.util.List)11 NodeFactory (me.lucko.luckperms.common.node.NodeFactory)10 Message (me.lucko.luckperms.common.locale.message.Message)9 LuckPermsPlugin (me.lucko.luckperms.common.plugin.LuckPermsPlugin)9 Sender (me.lucko.luckperms.common.sender.Sender)9 Collectors (java.util.stream.Collectors)8 MutableContextSet (me.lucko.luckperms.api.context.MutableContextSet)8 CommandResult (me.lucko.luckperms.common.command.CommandResult)8 CommandPermission (me.lucko.luckperms.common.command.access.CommandPermission)8 LocaleManager (me.lucko.luckperms.common.locale.LocaleManager)8 CommandSpec (me.lucko.luckperms.common.locale.command.CommandSpec)8 Predicates (me.lucko.luckperms.common.utils.Predicates)8 ArrayList (java.util.ArrayList)7 HashMap (java.util.HashMap)7