All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.jackrabbit.api.JackrabbitSession Maven / Gradle / Ivy

There is a newer version: 2024.11.18751.20241128T090041Z-241100
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.jackrabbit.api;

import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.jackrabbit.api.security.principal.PrincipalManager;

import javax.jcr.Item;
import javax.jcr.ItemNotFoundException;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.Session;
import javax.jcr.AccessDeniedException;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.osgi.annotation.versioning.ProviderType;

/**
 * Jackrabbit specific extension of the JCR {@link javax.jcr.Session} interface.
 */
@ProviderType
public interface JackrabbitSession extends Session {

    /**
     * A constant representing the {@code add_property} action string, used to
     * determine if this {@code Session} has permission to add a new property.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_ADD_PROPERTY = "add_property";

    /**
     * A constant representing the {@code modify_property} action string, used to
     * determine if this {@code Session} has permission to modify a property.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_MODIFY_PROPERTY = "modify_property";

    /**
     * A constant representing the {@code remove_property} action string, used to
     * determine if this {@code Session} has permission to remove a property.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_REMOVE_PROPERTY = "remove_property";

    /**
     * A constant representing the {@code remove_node} action string, used to
     * determine if this {@code Session} has permission to remove a node.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_REMOVE_NODE = "remove_node";

    /**
     * A constant representing the {@code node_type_management} action string,
     * used to determine if this {@code Session} has permission to write
     * node type information of a node.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_NODE_TYPE_MANAGEMENT = "node_type_management";

    /**
     * A constant representing the {@code versioning} action string,
     * used to determine if this {@code Session} has permission to perform
     * version operations on a node.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_VERSIONING = "versioning";

    /**
     * A constant representing the {@code locking} action string,
     * used to determine if this {@code Session} has permission to lock or
     * unlock a node.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_LOCKING = "locking";

    /**
     * A constant representing the {@code read_access_control} action string,
     * used to determine if this {@code Session} has permission to read
     * access control content at the given path.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_READ_ACCESS_CONTROL = "read_access_control";

    /**
     * A constant representing the {@code modify_access_control} action string,
     * used to determine if this {@code Session} has permission to modify
     * access control content at the given path.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_MODIFY_ACCESS_CONTROL = "modify_access_control";

    /**
     * A constant representing the {@code user_management} action string,
     * used to determine if this {@code Session} has permission to perform
     * user management operations at the given path.
     *
     * @see #hasPermission(String, String...)
     */
    String ACTION_USER_MANAGEMENT = "user_management";

    /**
     * Returns {@code true} if this {@code Session} has permission to
     * perform the specified actions at the specified {@code absPath} and
     * {@code false} otherwise.
     * 

* The {@code actions} parameter is a list of action strings. Apart * from the actions defined on {@link Session}, this variant also allows * to specify the following additional actions to provide better permission * discovery: *

    *
  • {@link * #ACTION_ADD_PROPERTY {@code add_property}}: If {@code hasPermission(path, * "add_property")} returns {@code true}, then this {@code Session} has * permission to add a new property at {@code path}.
  • *
  • {@link #ACTION_MODIFY_PROPERTY {@code modify_property}}: If * {@code hasPermission(path, "modify_property")} returns * {@code true}, then this {@code Session} has permission to change * a property at {@code path}.
  • *
  • {@link * #ACTION_REMOVE_PROPERTY {@code remove_property}}: If {@code hasPermission(path, * "remove_property")} returns {@code true}, then this {@code Session} has * permission to remove a property at {@code path}.
  • *
  • {@link #ACTION_REMOVE_NODE {@code remove_node}}: If * {@code hasPermission(path, "remove_node")} returns {@code true}, then * this {@code Session} has permission to remove a node at {@code path}.
  • *
  • {@link #ACTION_NODE_TYPE_MANAGEMENT {@code node_type_management}}: If * {@code hasPermission(path, "node_type_management")} returns {@code true}, then * this {@code Session} has permission to explicitly set or change the node type * information associated with a node at {@code path}.
  • *
  • {@link #ACTION_VERSIONING {@code versioning}}: If * {@code hasPermission(path, "versioning")} returns {@code true}, then * this {@code Session} has permission to perform version related operations * on a node at {@code path}.
  • *
  • {@link #ACTION_LOCKING {@code locking}}: If * {@code hasPermission(path, "locking")} returns {@code true}, then * this {@code Session} has permission to lock and unlock a node at {@code path}.
  • *
  • {@link #ACTION_READ_ACCESS_CONTROL {@code read_access_control}}: If * {@code hasPermission(path, "read_access_control")} returns {@code true}, then * this {@code Session} has permission to read access control content stored * at an item at {@code path}.
  • *
  • {@link #ACTION_MODIFY_ACCESS_CONTROL {@code modify_access_control}}: If * {@code hasPermission(path, "modify_access_control")} returns {@code true}, then * this {@code Session} has permission to modify access control content * at an item at {@code path}.
  • *
  • {@link #ACTION_USER_MANAGEMENT {@code user_management}}: If * {@code hasPermission(path, "user_management")} returns {@code true}, then * this {@code Session} has permission to perform user management operations * at an item at {@code path}.
  • *
* * When more than one action is specified, this method will only return * {@code true} if this {@code Session} has permission to perform all * of the listed actions at the specified path. *

* The information returned through this method will only reflect the permission * status (both JCR defined and implementation-specific) and not * other restrictions that may exist, such as node type or other * implementation enforced constraints. For example, even though * {@code hasPermission} may indicate that a particular {@code Session} may * add a property at {@code /A/B/C}, the node type of the node at {@code /A/B} * may prevent the addition of a property called {@code C}. * * @param absPath an absolute path. * @param actions one or several actions. * @return {@code true} if this {@code Session} has permission to * perform the specified actions at the specified * {@code absPath}. * @throws RepositoryException if an error occurs. * @see Session#hasPermission(String, String) */ boolean hasPermission(@NotNull String absPath, @NotNull String... actions) throws RepositoryException; /** * Returns the PrincipalManager for the current Session. * * @return the PrincipalManager associated with this Session. * @throws AccessDeniedException If the session lacks privileges to access * the principal manager or principals in general. * @throws UnsupportedRepositoryOperationException If principal management * is not supported. * @throws RepositoryException If another error occurs. * @see PrincipalManager */ PrincipalManager getPrincipalManager() throws AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException; /** * Returns the UserManager for the current Session. * * @return the UserManager associated with this Session. * @throws javax.jcr.AccessDeniedException If this session is not allowed to * to access user data. * @throws UnsupportedRepositoryOperationException If user management is * not supported. * @throws javax.jcr.RepositoryException If another error occurs. * @see UserManager */ UserManager getUserManager() throws AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException; /** * Returns the node at the specified absolute path in the workspace. If no * such node exists, then it returns the property at the specified path. * If no such property exists, then it return {@code null}. * * @param absPath An absolute path. * @return the specified {@code Item} or {@code null}. * @throws RepositoryException if another error occurs. * @since 2.11.1 */ Item getItemOrNull(final String absPath) throws RepositoryException; /** * Returns the property at the specified absolute path in the workspace or * {@code null} if no such node exists. * * @param absPath An absolute path. * @return the specified {@code Property} or {@code null}. * @throws RepositoryException if another error occurs. * @since 2.11.1 */ Property getPropertyOrNull(final String absPath) throws RepositoryException; /** * Returns the node at the specified absolute path in the workspace or * {@code null} if no such node exists. * * @param absPath An absolute path. * @return the specified {@code Node} or {@code null}. * @throws RepositoryException If another error occurs. * @since 2.11.1 */ Node getNodeOrNull(final String absPath) throws RepositoryException; /** * Returns the parent of the given {@code Item} or {@code null} if no parent exists (either because the given {@code Item} * represents the root node or the current session does not have sufficient access to retrieve the parent). * * @param item An {@code Item} that has been obtained by the current session. * @return The parent node of the given {@code Item} or {@code null}. * @throws RepositoryException If another error occurs. * @see Item#getParent() * @since 1.42 */ @Nullable default Node getParentOrNull(@NotNull Item item) throws RepositoryException { try { return item.getParent(); } catch (ItemNotFoundException | AccessDeniedException e) { return null; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy