Interface OperationService

  • All Known Implementing Classes:
    OperationServiceImpl

    @ExperimentalApi
    @ParametersAreNonnullByDefault
    public interface OperationService
    Since:
    5.8
    • Method Detail

      • getAllOperationsForType

        @NonNull List<OperationDescription> getAllOperationsForType​(TargetType targetType)
        For a given target type, list all operations this service can provide information about.
        Returns:
        a list describing all operations for which this service can provide permission and validation information for the specified target type
        Throws:
        BadRequestException - if targetType is null
        PermissionException - if targetType is unknown (e.g. for custom types for which no OperationDelegates are registered)
      • getAvailableOperations

        @NonNull List<OperationCheckResult> getAvailableOperations​(Person person,
                                                                   Target target)
        List all operations that a person can perform on a particular target.
        Parameters:
        person - the Person on which to perform a permission and validation check
        target - the Target to check permission for
        Returns:
        a list (possibly empty) of operations the person has permission to perform on this target in its current state, i.e. for which canPerform(Person, Operation, Target) would return a valid and authorized result.
        Throws:
        BadRequestException - if person or target is null
        NotFoundException - if target doesn't exist
        PermissionException - if targetType is unknown (e.g. for custom types for which no OperationDelegates are registered)
      • canPerform

        @NonNull ValidationResult canPerform​(Person person,
                                             Operation operation,
                                             Target target)
        Check whether a person can perform a particular operation on a particular target.
        Parameters:
        person - the Person on which to perform a permission and validation check
        operation - the operation to check permission for
        target - the Target to check permission for
        Returns:
        • an authorized and valid result if Person can perform operation on this target in its current state
        • an unauthorized result if permissions prevent Person performing the operation on this target
        • a not-valid result for the following cases:
          • the operation is not valid for the specified target type
          • the operation is not currently valid for target due to its state
          • target doesn't exist
          • target is a custom content type or operation is a custom one, and no suitable OperationDelegate is installed
        Throws:
        BadRequestException - if person, operation or target is null, or if target points to the wrong kind of object for this operation check.
      • canPerformWithoutExemptions

        @NonNull ValidationResult canPerformWithoutExemptions​(Person person,
                                                              Operation operation,
                                                              Target target)
        Check whether a person can perform a particular operation on a particular target.

        This check doesn't grant permission exemptions when called using #withExemption(Runnable).

        Parameters:
        person - the Person on which to perform a permission and validation check
        operation - the operation to check permission for
        target - the Target to check permission for
        Returns:
        • an authorized and valid result if Person can perform operation on this target in its current state
        • an unauthorized result if permissions prevent Person performing the operation on this target
        • a not-valid result for the following cases:
          • the operation is not valid for the specified target type
          • the operation is not currently valid for target due to its state
          • target doesn't exist
          • target is a custom content type or operation is a custom one, and no suitable OperationDelegate is installed
        Throws:
        BadRequestException - if person, operation or target is null, or if target points to the wrong kind of object for this operation check.
      • canPerform

        @NonNull Map<Target,​ValidationResult> canPerform​(Person person,
                                                               Operation operation,
                                                               Iterable<Target> targets)
        Check whether the specified Person can perform a particular operation on each of the specified targets. (Bulk version of canPerform(Person, Operation, Target).)
        Parameters:
        person - the Person on which to perform a permission and validation check
        operation - the operation to check permission for
        targets - the Targets to individually check permission for; at least one target is required; must all be of the same TargetType
        Returns:
        a Map providing a ValidationResult for each of the supplied targets. Results for each target will be as follows:
        • an authorized and valid result if Person can perform operation on this target in its current state
        • an unauthorized result if permissions prevent Person performing the operation on this target
        • a not-valid result for the following cases:
          • the operation is not valid for the specified target type
          • the operation is not currently valid for target due to its state
          • target doesn't exist
          • target is a custom content type or operation is a custom one, and no suitable OperationDelegate is installed
        Throws:
        BadRequestException - if any of the parameters are null, or if targets is empty, contains null targets or mixed TargetTypes, or if any target points to the wrong kind of object for this operation check.
      • canPerformWithoutExemptions

        @NonNull Map<Target,​ValidationResult> canPerformWithoutExemptions​(Person person,
                                                                                Operation operation,
                                                                                Iterable<Target> targets)
        Check whether the specified Person can perform a particular operation on each of the specified targets. (Bulk version of canPerform(Person, Operation, Target).)

        This check doesn't grant permission exemptions when called using #withExemption(Runnable).

        Parameters:
        person - the Person on which to perform a permission and validation check
        operation - the operation to check permission for
        targets - the Targets to individually check permission for; at least one target is required; must all be of the same TargetType
        Returns:
        a Map providing a ValidationResult for each of the supplied targets. Results for each target will be as follows:
        • an authorized and valid result if Person can perform operation on this target in its current state
        • an unauthorized result if permissions prevent Person performing the operation on this target
        • a not-valid result for the following cases:
          • the operation is not valid for the specified target type
          • the operation is not currently valid for target due to its state
          • target doesn't exist
          • target is a custom content type or operation is a custom one, and no suitable OperationDelegate is installed
        Throws:
        BadRequestException - if any of the parameters are null, or if targets is empty, contains null targets or mixed TargetTypes, or if any target points to the wrong kind of object for this operation check.
      • withExemption

        <T> T withExemption​(Supplier<T> task)
        Execute the given task with permission exemption.

        Calls to canPerform(Person, Operation, Iterable) and canPerform(Person, Operation, Target) within the executed task will return an authorized and valid result if the operation can be performed on each target based on the target's state, irrespective of the user's permissions. Calls to other permission checks in confluence may also be affected.

        Use with care.

        Parameters:
        task - task to execute with permission exemption