본 블로그에서는 이전 블로그(https://devocean.sk.com/blog/techBoardDetail.do?ID=163522)에서 소개했던 playground의 예제를 분석하여 OPA를 통한 실질적인 구현에서 각 데이터들을 설계하고 사용하는 방법에 대한 이해도를 높히도록 한다.
Playground에서 제공하는 예제는 다음과 같다.
목차
{
"user_roles": {
"alice": [
"admin"
],
"bob": [
"employee",
"billing"
],
"eve": [
"customer"
]
},
"role_grants": {
"customer": [
{
"action": "read",
"type": "dog"
},
{
"action": "read",
"type": "cat"
},
{
"action": "adopt",
"type": "dog"
},
{
"action": "adopt",
"type": "cat"
}
],
"employee": [
{
"action": "read",
"type": "dog"
},
{
"action": "read",
"type": "cat"
},
{
"action": "update",
"type": "dog"
},
{
"action": "update",
"type": "cat"
}
],
"billing": [
{
"action": "read",
"type": "finance"
},
{
"action": "update",
"type": "finance"
}
]
}
}
package app.rbac
import future.keywords.in
default allow = false
allow {
user_is_admin
}
allow {
some grant
user_is_granted[grant]
input.action == grant.action
input.type == grant.type
}
user_is_admin {
"admin" in data.user_roles[input.user]
}
user_is_granted[grant] {
some role in data.user_roles[input.user]
some grant in data.role_grants[role]
}
Access Control
Envoy