Valtimo documentation v1
Valtimo 11
Valtimo 11
  • Introduction
    • Overview
    • Architectural overview
    • Available modules
      • Dashboards
      • Documents
      • Form flow
      • Form links (deprecated)
      • Plugins
    • How to contribute
    • Style guide for contributing
  • Getting started
    • First dive into Valtimo
      • Start as Docker containers
      • Creating your own Valtimo implementation
    • Compatibility matrix
    • Components
      • Valtimo List
    • Configure database
    • Modules
      • Core
        • Audit
        • Authorization
        • Camunda
        • Case
        • Connector
        • Contract
        • Core
        • Dashboard
        • Document
        • Document generation
        • Exporter
        • Form
        • Form flow
        • Form link (deprecated)
        • Importer
        • Local document generation
        • Local mail
        • Mail
        • Mandrill
        • Milestones
        • Plugins
        • Outbox
          • Outbox RabbitMQ
        • Process document
        • Resource
        • Temporary resource storage
        • Test utils common
        • Value resolvers
        • Valtimo dependencies
        • Web
          • CORS
      • ZGW
        • Besluit
        • Besluiten API
        • Catalogi API
        • Contactmoment
        • Documenten API
        • Haalcentraal BRP
        • Klant
        • Notificaties API
        • Notificaties API Authentication
        • Objecten API
        • Objecten API Authentication
        • Object management
        • Objects API
        • Objecttypen API
        • OpenZaak
        • OpenZaak resource
        • Portaaltaak
        • SmartDocuments
        • Valtimo GZAC dependencies
        • Verzoek
        • Wordpress mail
        • Zaken API
    • Exchange
      • Building blocks
      • Process blueprints
  • Using Valtimo
    • Access control
      • Auto-deployment for access control
      • Configuring permissions
      • Configuring roles
      • Front-end access control
    • Case
      • Creating case settings
      • Case tabs
      • Exporting and importing case definitions
    • Dashboard
      • Auto deploying dashboards
      • Create dashboard
    • Documents
      • Assigning a user to a document
      • Automatic task assignment
      • Creating a document definition
      • Creating case settings
      • Custom case list columns
      • Custom case headers
      • How to link a process to a case
      • How to start a process for a case
      • Search fields
      • Case search
    • Forms
      • Creating FormIO forms in Valtimo
      • Interpolating data in Form.io
      • Configuring an Objecten API object form
    • Form flow
      • Creating a form flow definition
      • Creating a custom form flow component
    • Form links (deprecated)
      • How to refer to external data from a form
      • How to link a form to a task
    • Keycloak
      • Configuring Keycloak
    • Pending Changes mechanism
    • Plugins
      • Catalogi API plugin
      • Configuring plugins
      • SmartDocuments plugin
      • OpenZaak plugin
      • Documenten API plugin
      • Zaken API plugin
      • Object Token Auhentication Plugin
      • Objecten API Plugin
      • Objecttypen API Plugin
      • Portaaltaak Plugin
      • Exact Plugin
      • Verzoek Plugin
      • Besluiten Plugin
    • Process
      • System processes
      • Correlating messages
      • Job service
    • Process links
      • Creating a process link
      • Editing a process link
      • Unlinking a process link
    • Upload
      • Temporary file storage
      • Uploading to Documenten API with metadata
    • Web
      • Configure CORS in Valtimo
  • Extending Valtimo
    • Access control
      • Creating a resource
      • Creating a relation to another resource
    • Dashboard
      • Creating custom data sources
      • Creating custom display types
      • Widget translations
    • Document
      • Assigning and unassigning a user
      • Search fields
    • Forms
      • Creating a form field data resolver
    • Form flow
      • Whitelisting Spring beans for Form flow
    • Making Valtimo multi instance ready
    • Modals (external docs)
    • Creating a custom outbox message publisher
    • Plugins
      • Custom plugin definitions
    • Process
      • Whitelisting Spring beans for Camunda
    • Tabs
      • Customizing case details tabs
      • Customizing case list tabs
      • Setting extra tabs for Zaak object type
    • Integrating spring beans in a process
    • Creating a custom dashboard
    • Creating a custom value resolver
    • Security testing
  • References
    • Modules
      • Authorization
      • Outbox
      • Dashboard
      • Case
      • Core
        • ZonedLocalDateTimeDeserializer
      • Document
      • Form
      • Form flow
      • Form links (deprecated)
      • Object management
      • Value resolvers
    • User interface
      • Design philosophy
      • Carbon design system
      • v-button
      • Breadcrumbs
    • Feature toggles
    • Supported databases
    • Process beans
    • Content Security Policy (CSP)
    • Troubleshoot
  • Release notes
    • Release notes
    • 11.x.x
      • 11.3.3
        • Valtimo backend libraries
      • 11.3.2
        • Valtimo frontend libraries
      • 11.3.1
        • Valtimo frontend libraries
      • 11.3.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.2.2
        • Valtimo frontend libraries
      • 11.2.1
        • Valtimo frontend libraries
      • 11.2.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.1.6
        • Valtimo frontend libraries
      • 11.1.5
        • Valtimo frontend libraries
      • 11.1.4
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.1.1
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.1.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 11.0.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
    • 10.x.x
      • 10.8.5
        • Valtimo backend libraries
      • 10.8.4
        • Valtimo frontend libraries
      • 10.8.3
        • Valtimo backend libraries
      • 10.8.2
        • Valtimo frontend libraries
      • 10.8.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.7.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.6.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
      • 10.5.3
        • Valtimo backend libraries
      • 10.5.2
        • Valtimo backend libraries
      • 10.5.1
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.5.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
      • 10.4.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.3.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.2.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
      • 10.1.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
      • 10.0.1
        • Valtimo frontend libraries
      • 10.0.0
        • Valtimo backend libraries
        • Valtimo frontend libraries
        • Migration
    • 9.x.x
      • 9.26.2/5.15.2
        • Valtimo backend libraries (9.26.2)
        • Valtimo frontend libraries (5.15.2)
        • Migration
      • 9.26.1/5.15.1
        • Valtimo backend libraries (9.26.1)
        • Valtimo frontend libraries (5.15.1)
      • 9.26.0/5.15.0
        • Valtimo backend libraries (9.26.0)
        • Valtimo frontend libraries (5.15.0)
        • Migration
      • 9.25.0/5.14.0
        • Valtimo backend libraries (9.25.0)
        • Valtimo frontend libraries (5.14.0)
      • 9.24.0/5.13.0
        • Valtimo backend libraries (9.24.0)
        • Valtimo frontend libraries (5.13.0)
      • 9.23.0/5.12.0
        • Valtimo backend libraries (9.23.0)
        • Valtimo frontend libraries (5.12.0)
      • 9.22.0/5.11.0
        • Valtimo backend libraries (9.22.0)
        • Valtimo frontend libraries (5.11.0)
        • Migration
      • 9.21.0/5.10.0
        • Valtimo backend libraries (9.21.0)
        • Valtimo frontend libraries (5.10.0)
        • Migration
      • 9.20.0/5.9.1
        • Valtimo backend libraries (9.20.0)
        • Valtimo frontend libraries (5.9.1)
        • Migration
      • 9.19.0/5.8.0
        • Valtimo backend libraries (9.19.0)
        • Valtimo frontend libraries (5.8.0)
        • Migration
      • 9.18.0/5.6.0
        • Valtimo backend libraries (9.18.0)
        • Valtimo frontend libraries (5.6.0)
        • Migration
      • 9.17.0/5.5.0
        • Valtimo backend libraries (9.17.0)
        • Valtimo frontend libraries (5.5.0)
      • 9.16.0/5.4.0
        • Valtimo backend libraries (9.16.0)
        • Valtimo frontend libraries (5.4.0)
Powered by GitBook
On this page
  • Defining permissions
  • Using permissions
  1. Using Valtimo
  2. Access control

Front-end access control

For each element of the user interface which is shown/hidden or enabled/disabled in the front-end based on an access control policy, a separate call is defined. These calls are subsequently bundled by the PermissionService, which is exported from @valtimo/access-control.

Defining permissions

For a part of your user interface, for example a page, it is best to define all the permissions it needs to request in one file. In this file, define each permission to be requested separately, conforming to the interface PermissionRequest:

sample.permissions.ts

import {PermissionRequest} from '@valtimo/access-control';

// Enums are defined for use in the below permissions. This is to avoid duplication, and is optional.
enum PERMISSION_ACTION {
    assign = 'ASSIGN',
    claim = 'CLAIM',
}

enum DOSSIER_DETAIL_PERMISSION_RESOURCE {
    domain = 'com.ritense.document.domain.impl.JsonSchemaDocument',
}

const CAN_CLAIM_CASE_PERMISSION: PermissionRequest = {
    action: PERMISSION_ACTION.claim,
    resource: DOSSIER_DETAIL_PERMISSION_RESOURCE.domain,
};

const CAN_ASSIGN_CASE_PERMISSION: PermissionRequest = {
    action: PERMISSION_ACTION.assign,
    resource: DOSSIER_DETAIL_PERMISSION_RESOURCE.domain,
};

export {CAN_CLAIM_CASE_PERMISSION, CAN_ASSIGN_CASE_PERMISSION}

Using permissions

Permissions defined in the above example, are imported into your component code and transferred to the PermissionService, which returns an Observable emitting a boolean value for the respective permission:

sample.component.ts

...
// import PermissionService
import {PermissionService} from '@valtimo/access-control';
...
// import previously defined permissions
import {
    CAN_CLAIM_CASE_PERMISSION,
    CAN_ASSIGN_CASE_PERMISSION,
} from '../permissions';
...

@Component({
    selector: 'sample-component',
    templateUrl: './sample-component.component.html',
    styleUrls: ['./sample-component.component.css'],
})
export class SampleComponent {

    // the permission to claim a case is defined directly as a component property
    public readonly canClaimCase$: Observable<boolean> = 
        this.permissionService.requestPermission(CAN_CLAIM_CASE_PERMISSION)
    
    // route paramaters are used to add dynamic context to the 'can assign case permission'
    public readonly canAssign$: Observable<boolean> = this.route.paramMap.pipe(
        switchMap((params: ParamMap) =>
            this.permissionService.requestPermission(
                // the defined permission itself
                CAN_ASSIGN_CASE_PERMISSION, 
                // context object as a second paramter
                {
                resource: DOSSIER_DETAIL_PERMISSION_RESOURCE.domain,
                identifier: params.get('documentId') ?? '',
            })
        )
    );
    
    constructor(
        ...
        // inject PermissionService
        private readonly permissionService: PermissionService
    ) {
    }
}

With each permission defined as an Observable emitting a boolean value, with its own component property, they may now be used in the template code of your component. To do this efficiently, it is recommended to use async pipes:

sample.component.html

<div class="container">
    <!--    The claim button is shown when a case can be claimed-->
    <button *ngIf="canClaimCase$ | async" (click)="claim()">
        Claim case
    </button>

    <!--    The assign button is enabled when a case can be assigned-->
    <button [disabled]="(canAssign$ | async) === false" (click)="assign()">
        Assign case
    </button>
</div>
PreviousConfiguring rolesNextCase

Last updated 1 year ago