William Adjei
04/10/2025, 12:59 PMderived_roles.yaml:>>
apiVersion: "api.cerbos.dev/v1"
derivedRoles:
name: navigation-roles
definitions:
- name: admin-role
parentRoles: ["admin", "ADMIN", "Admin"]
- name: manager-role
parentRoles: ["manager", "MANAGER", "Manager"]
- name: user-role
parentRoles: ["user", "USER", "User"]
menu_policy.yaml:>>
apiVersion: api.cerbos.dev/v1
resourcePolicy:
version: "default"
importDerivedRoles:
- navigation-roles
resource: navigation
rules:
# Fallback rule for debugging - allow access to everyone with basic menu
- actions: ["access"]
derivedRoles:
- any-role
effect: EFFECT_ALLOW
output:
expr: '{"allowed_menu_items": ["/dashboard"]}'
# Regular rules
- actions: ["access"]
derivedRoles:
- admin-role
effect: EFFECT_ALLOW
output:
expr: '{"allowed_menu_items": ["/dashboard", "/sales", "/marketing"]}'
- actions: ["access"]
derivedRoles:
- manager-role
effect: EFFECT_ALLOW
output:
expr: '{"allowed_menu_items": ["/dashboard", "/sales"]}'
- actions: ["access"]
derivedRoles:
- user-role
effect: EFFECT_ALLOW
output:
expr: '{"allowed_menu_items": ["/dashboard"]}'
oguzhan
CheckResources
request:
{
"requestId": "1",
"principal": {
"id": "1",
"roles": [
"USER"
],
"attr": {}
},
"resources": [
{
"resource": {
"kind": "navigation",
"id": "1",
"attr": {}
},
"actions": [
"access"
]
}
]
}
The response:
{
"requestId": "1",
"results": [
{
"resource": {
"id": "1",
"kind": "navigation"
},
"actions": {
"access": "EFFECT_ALLOW"
},
"outputs": [
{
"src": "resource.navigation.vdefault#rule-003",
"val": {
"allowed_menu_items": [
"/dashboard"
]
}
}
]
}
]
}
https://play.cerbos.dev/p/eV9YYejAAsj5XIO67f7c1e7oADrB38qfWilliam Adjei
04/10/2025, 1:53 PMSam Lock (Cerbos)
04/10/2025, 2:23 PMderivedRole: any-role
in the resource policy. This isn't defined in your derived role policy so can never be assumed (so that particular rule will never resolve to ALLOW
).William Adjei
04/10/2025, 2:48 PMEFFECT_DENY
. When starting up its container in docker the logs had this Found 0 executable policies
William Adjei
04/10/2025, 2:49 PMserver:
httpListenAddr: ":3592"
storage:
driver: "disk"
disk:
directory: ./policies
watchForChanges: true
William Adjei
04/10/2025, 2:49 PMcerbos/
āāā config/
ā āāā config.yaml
āāā policies/
āāā navigation.yaml
William Adjei
04/10/2025, 2:50 PMoguzhan
William Adjei
04/10/2025, 2:53 PM2025-04-10 14:46:01 {"log.level":"info","@timestamp":"2025-04-10T14:46:01.351Z","log.logger":"cerbos.disk.store","message":"Initializing disk store from /policies"}
2025-04-10 14:46:01 {"log.level":"info","@timestamp":"2025-04-10T14:46:01.351Z","log.logger":"cerbos.index","message":"Found 0 executable policies"}
2025-04-10 14:46:01 {"log.level":"info","@timestamp":"2025-04-10T14:46:01.351Z","log.logger":"cerbos.telemetry","message":"Anonymous telemetry enabled. Disable via the config file or by setting the CERBOS_NO_TELEMETRY=1 environment variable"}
William Adjei
04/10/2025, 2:54 PMdocker run --rm --name cerbos-cred -d \
-v $(pwd)/cerbos:/opt/cerbos \
-p 3592:3592 \
<http://ghcr.io/cerbos/cerbos:0.43.0|ghcr.io/cerbos/cerbos:0.43.0> \
server --config=/opt/cerbos/config/config.yaml
oguzhan
navigation.yaml
btw. I think it should be like this:
cerbos/
āāā config/
ā āāā config.yaml
āāā policies/
āāā derived_roles.yaml
āāā menu_policy.yaml
William Adjei
04/10/2025, 3:00 PMoguzhan
config.yaml
to this and try again?:
server:
httpListenAddr: ":3592"
storage:
driver: "disk"
disk:
directory: /opt/cerbos/policies
watchForChanges: true
William Adjei
04/10/2025, 3:34 PMWilliam Adjei
04/10/2025, 4:19 PMoguzhan