Derived roles

Traditional RBAC roles are usually broad groupings with no context awareness. Derived roles are a way of augmenting those broad roles with contextual data to provide more fine-grained control at runtime. For example, a person with the broad manager role can be augmented to manager_of_scranton_branch by taking into account the geographic location (or another factor) and giving that derived role bearer extra privileges on resources that belong to the Scranton branch.

---
apiVersion: "api.cerbos.dev/v1"
description: |-
  Common dynamic roles used within the Apatr app
variables: (1)
  flagged_resource: request.resource.attr.flagged
derivedRoles:
  name: apatr_common_roles (2)
  definitions:
    - name: owner (3)
      parentRoles: ["user"] (4)
      condition: (5)
        match:
          expr: request.resource.attr.owner == request.principal.id

    - name: abuse_moderator
      parentRoles: ["moderator"]
      condition:
        match:
          expr: V.flagged_resource == true
1 Optional variables section. Each variable is evaluated before any rule condition. A variable expression can contain anything that condition expression can have.
2 Name to use when importing this set of derived roles.
3 Descriptive name for this derived role.
4 The static roles (from the identity provider) to which this derived role applies to. The special value * can be used to match any role.
5 An (optional) set of expressions that should evaluate to true for this role to activate.