Jesum Yip
12/16/2021, 6:14 AMJesum Yip
12/16/2021, 6:15 AMJesum Yip
12/16/2021, 6:18 AM{
"requestId": "1",
"resourceInstances": {
"prod": {
"actions": {
"read": "EFFECT_ALLOW"
}
}
},
"meta": {
"resourceInstances": {
"prod": {
"actions": {
"read": {
"matchedPolicy": "resource.businessassets.v1"
}
},
"effectiveDerivedRoles": []
}
}
}
}
Jesum Yip
12/16/2021, 6:18 AMJesum Yip
12/16/2021, 6:18 AMDennis (Cerbos)
Jesum Yip
12/16/2021, 6:20 AMJesum Yip
12/16/2021, 6:20 AMDennis (Cerbos)
Jesum Yip
12/16/2021, 6:22 AMJesum Yip
12/16/2021, 6:22 AMDennis (Cerbos)
all
with any
in your latest screenshotDennis (Cerbos)
Jesum Yip
12/16/2021, 6:25 AMJesum Yip
12/16/2021, 6:25 AMDennis (Cerbos)
Dennis (Cerbos)
- name: explore
condition:
match:
any:
of:
- expr: (request.aux_data.jwt.hm_account_status == "Explore" && request.aux_data.jwt.is_hm_employee != "TRUE")
- expr: (equest.aux_data.jwt.hm_account_status != "" && request.aux_data.jwt.is_hm_employee != "TRUE")
Jesum Yip
12/16/2021, 6:34 AMJesum Yip
12/16/2021, 6:37 AM{
"requestId": "1",
"resourceInstances": {
"prod": {
"actions": {
"read": "EFFECT_DENY"
}
}
},
"meta": {
"resourceInstances": {
"prod": {
"actions": {
"read": {
"matchedPolicy": "resource.businessassets.v1"
}
},
"effectiveDerivedRoles": []
}
}
}
}
Jesum Yip
12/16/2021, 6:37 AMDennis (Cerbos)
size(request.<http://aux_data.jwt.hm|aux_data.jwt.hm>_account_status) == 0
?Jesum Yip
12/16/2021, 6:37 AMJesum Yip
12/16/2021, 6:37 AMJesum Yip
12/16/2021, 6:37 AMDennis (Cerbos)
Jesum Yip
12/16/2021, 6:38 AMDennis (Cerbos)
Jesum Yip
12/16/2021, 6:38 AMDennis (Cerbos)
- name: explore
condition:
match:
any:
of:
- expr: (request.aux_data.jwt.hm_account_status == "Explore" && request.aux_data.jwt.is_hm_employee != "TRUE")
- expr: (!has(request.aux_data.jwt.hm_account_status) && request.aux_data.jwt.is_hm_employee != "TRUE")
Jesum Yip
12/16/2021, 6:40 AMJesum Yip
12/16/2021, 6:44 AMJesum Yip
12/16/2021, 6:44 AMJesum Yip
12/16/2021, 6:45 AMJesum Yip
12/16/2021, 6:45 AMJesum Yip
12/16/2021, 6:45 AM{
"requestId": "1",
"resourceInstances": {
"prod": {
"actions": {
"read": "EFFECT_DENY"
}
}
},
"meta": {
"resourceInstances": {
"prod": {
"actions": {
"read": {
"matchedPolicy": "resource.businessassets.v1"
}
},
"effectiveDerivedRoles": []
}
}
}
}
Jesum Yip
12/16/2021, 6:46 AMJesum Yip
12/16/2021, 6:46 AMJesum Yip
12/16/2021, 6:47 AMDennis (Cerbos)
Dennis (Cerbos)
Jesum Yip
12/16/2021, 6:48 AMDennis (Cerbos)
Dennis (Cerbos)
hm_employee
derived role from the resource policy?Jesum Yip
12/16/2021, 6:53 AMJesum Yip
12/16/2021, 6:55 AM{
"requestId": "1",
"resourceInstances": {
"prod": {
"actions": {
"read": "EFFECT_DENY"
}
}
},
"meta": {
"resourceInstances": {
"prod": {
"actions": {
"read": {
"matchedPolicy": "resource.businessassets.v1"
}
},
"effectiveDerivedRoles": []
}
}
}
}
Jesum Yip
12/16/2021, 6:55 AMapiVersion: api.cerbos.dev/v1
resourcePolicy:
version: "1"
importDerivedRoles:
- platform_roles
resource: "businessassets"
rules:
- name: allow_readbusinessassets_test
actions: ['read']
effect: EFFECT_ALLOW
derivedRoles:
- explore
Jesum Yip
12/16/2021, 6:55 AMJesum Yip
12/16/2021, 6:56 AMapiVersion: "api.cerbos.dev/v1"
description: "Dynamic roles."
derivedRoles:
name: platform_roles
definitions:
- name: explore
parentRoles: ["naked_user"]
condition:
match:
any:
of:
- expr: (request.aux_data.jwt.hm_account_status == "Explore" && request.aux_data.jwt.is_hm_employee != "TRUE")
- expr: (request.aux_data.jwt.hm_account_status == "" && request.aux_data.jwt.is_hm_employee != "TRUE")
- expr: (request.aux_data.jwt.hm_account_status == "" && request.aux_data.jwt.is_hm_employee == "")
- expr: (!has(request.aux_data.jwt.hm_account_status))
- expr: (!has(request.aux_data.jwt.is_hm_employee))
- name: expand
parentRoles: ["naked_user"]
condition:
match:
all:
of:
- expr: request.aux_data.jwt.hm_account_status == "Expand"
- expr: request.aux_data.jwt.is_hm_employee != "TRUE"
- name: experience
parentRoles: ["naked_user"]
condition:
match:
all:
of:
- expr: request.aux_data.jwt.hm_account_status == "Experience"
- expr: request.aux_data.jwt.is_hm_employee != "TRUE"
Jesum Yip
12/16/2021, 6:56 AMDennis (Cerbos)
Jesum Yip
12/16/2021, 7:30 AMDennis (Cerbos)
Dennis (Cerbos)
- expr: (request.<http://aux_data.jwt.hm|aux_data.jwt.hm>_account_status == "" && request.aux_data.jwt.is_hm_employee == "")
this fails the entire condition if there’s no hm_account_status
field in the JWT structDennis (Cerbos)
- name: explore
parentRoles: ["naked_user"]
condition:
match:
any:
of:
- expr: (!has(request.aux_data.jwt.hm_account_status) || request.aux_data.jwt.hm_account_status == "")
- expr: (!has(request.aux_data.jwt.is_hm_employee) || request.aux_data.jwt.is_hm_employee == "")
Jesum Yip
12/16/2021, 7:51 AMJesum Yip
12/16/2021, 7:51 AMJesum Yip
12/16/2021, 8:05 AMJesum Yip
12/16/2021, 8:06 AMDennis (Cerbos)
Jesum Yip
12/16/2021, 8:08 AMJesum Yip
12/16/2021, 8:08 AM{"requestId":"1","resourceInstances":{"prod":{"actions":{"read":"EFFECT_ALLOW"},"validationErrors":[]}},"meta":{"resourceInstances":{"prod":{"actions":{"read":{"matchedPolicy":"resource.businessassets.v1"}},"effectiveDerivedRoles":["explore"]}}}}
Jesum Yip
12/16/2021, 8:08 AMDennis (Cerbos)