Restricting Which Users Can Operate a USER TASK Created in Camunda Modeler

Hello,
I am currently performing functional tests of Camunda in preparation for commercial deployment.

Our environment is based on Docker containers:

  • Orchestration (including Zeebe, Operate, Tasklist, Identity)

  • Keycloak

  • PostgreSQL

  • Elasticsearch

Camunda version: 8.8
We are using the OIDC authentication method, meaning user authentication is handled by Keycloak, while group and role management is handled by Camunda Identity.

My understanding is that the Assignment feature should allow restricting operations on a USER TASK by user or group.

Here is my question:

  • I want a USER TASK created in Camunda Modeler to be visible only to users belonging to “Group A” defined in Identity UI.(Display in Tasklist UI)

User task access restrictions | Camunda 8 Docs

According to this documentation, user task access restrictions are only supported in Tasklist v1.
This means that in our current orchestration cluster setup, features like candidate users or candidate groups for restricting user access cannot be used.

My question is:
If we want to achieve similar behavior—restricting access to user tasks based on users or groups—in an orchestration cluster, what is the recommended approach?

Hello @camundaman12345,

Great question! You’re on the right track with using candidate groups to restrict user task visibility. Let me walk you through the complete configuration for your Camunda 8.8 setup with OIDC and Keycloak.

How Candidate Groups Work

In BPMN user tasks, candidateGroups is a list of strings that must match the group names that Camunda knows about via Identity/OIDC claims. When user task access restrictions are enabled, a user sees a task in Tasklist only if they are:

  • The assignee, or
  • Listed in candidateUsers, or
  • A member of one of the candidateGroups

Required Configuration

1. Keycloak Configuration

Ensure your Keycloak users have group information in their tokens. Typically this comes through a groups claim in the OIDC token.

2. Identity UI Configuration

You need to configure Orchestration Identity (not Management Identity):

Important: Make sure you’re accessing the Orchestration Identity UI and that you have RESOURCE_PERMISSIONS_ENABLED=true to see Groups and Authorizations tabs.

  • Groups: Create or map your groups (e.g., “Group A”)
  • Mapping Rules: Map Keycloak claims to Identity groups
    • Map the groups claim containing GroupA from Keycloak to an Identity group named GroupA
  • Authorizations: Set up appropriate permissions for the group

3. Camunda Modeler Configuration

In your user task’s Assignments section:

  • Set Candidate groups to the exact group name: GroupA
  • This can be static text or an expression that evaluates to a list of strings

4. Tasklist Configuration

Critical: You must use Tasklist V1 mode with “Enforce user task restrictions” enabled in your Console/cluster settings.

:warning: Important Limitation: If you’re using Tasklist V2 API or custom frontends, candidate groups are not enforced by Camunda. You’d need to implement custom authorization logic in your backend.

Step-by-Step Setup

  1. Verify Orchestration Identity access: Ensure you can see Groups and Authorizations tabs
  2. Create mapping rules: Map Keycloak groups to Identity groups with exact names
  3. Set candidate groups in Modeler: Use the exact group name (e.g., GroupA)
  4. Enable user task restrictions: Keep this enabled in Tasklist V1 mode
  5. Test: Users in “Group A” should only see tasks with candidateGroups containing GroupA

Troubleshooting

If candidate groups aren’t working as expected:

  • Verify you’re using Tasklist V1 (not V2)
  • Check that user task access restrictions are enabled
  • Ensure group names match exactly between Identity and BPMN
  • Confirm users are properly mapped to groups via mapping rules

References:

Let me know if you need help with any specific part of this configuration!

In our environment, the Camunda version is 8.8, which means we are using the Orchestration Cluster API.
In this case, the Tasklist version should be V2.
Indeed, it seems that the Candidate Groups feature in Camunda Modeler is not working as expected.

I would like to ask about the following two points:

  1. How can I check which Tasklist version is currently active?

  2. How can I change the Tasklist version?

Thank you in advance for your support.

Perfect! You’ve identified the exact issue. Since you’re using Camunda 8.8, Tasklist V2 is indeed the default, and that’s why your candidate groups aren’t working as expected.

1. How to Check Current Tasklist Version

In Camunda 8.8+, V2 is the default. There’s no explicit version label in the UI, but you can determine this by:

  • If you haven’t changed any Tasklist configuration: You’re on V2
  • Check your configuration: Look for the V2ModeEnabled setting (see below)

2. How to Switch to Tasklist V1

Since you’re using Docker containers (Self-Managed), you can switch to V1 using environment variables or YAML configuration:

Option A: Environment Variable

CAMUNDA_TASKLIST_V2_MODE_ENABLED=false  # Use V1

Option B: YAML Configuration

camunda:
  tasklist:
    V2ModeEnabled: false  # Use V1

Where:

  • false = Tasklist V1 (supports candidate groups)
  • true = Tasklist V2 (default in 8.8+, no candidate group support)

3. Complete Solution for Your Use Case

To get candidate groups working with “Group A” visibility:

  1. Switch to Tasklist V1: Set CAMUNDA_TASKLIST_V2_MODE_ENABLED=false

  2. Enable user task access restrictions: In Console → Clusters → Settings, ensure “Enforce user task restrictions” is enabled

  3. Configure Identity mapping: Set up mapping rules from Keycloak groups to Identity groups

  4. Set candidate groups in Modeler: Use the exact group name (e.g., GroupA)

Important Notes

  • User task access restrictions only work with Tasklist V1
  • In V2, candidate users/groups don’t affect task visibility - you’d need to implement custom authorization logic
  • The Console setting “Enforce user task restrictions” only has effect when using V1

After switching to V1 and restarting your containers, your candidate groups should work as expected, restricting task visibility to users in “Group A”.

References:

Let me know how it goes after switching to V1!

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.