Skip to content

Policy Catalog (RBAC & ABAC patterns)

Tenant isolation (resource.owner/tenant)

{
  "algorithm": "deny-overrides",
  "rules": [
    {"id":"tenant_read","effect":"permit","actions":["read"],"resource":{"type":"doc"},
     "condition":{"==":[{"attr":"subject.tenant"},{"attr":"resource.attrs.tenant"}]}},
    {"id":"tenant_write","effect":"permit","actions":["write"],"resource":{"type":"doc"},
     "condition":{"==":[{"attr":"subject.tenant"},{"attr":"resource.attrs.tenant"}]}}
  ]
}

Owner-only

{
  "rules":[
    {"id":"owner","effect":"permit","actions":["*"],"resource":{"type":"doc"},
     "condition":{"==":[{"attr":"subject.id"},{"attr":"resource.attrs.owner"}]}}
  ]
}

Clearance >= classification (numbers)

{
  "rules":[
    {"id":"clearance","effect":"permit","actions":["read"],"resource":{"type":"record"},
     "condition":{">=":[{"attr":"subject.clearance"},{"attr":"resource.attrs.classification"}]}}
  ]
}

Time window (business hours) + MFA obligation

{
  "algorithm": "permit-overrides",
  "rules":[
    {"id":"work_hours","effect":"permit","actions":["read"],"resource":{"type":"doc"},
     "condition":{"between":[{"attr":"context.now"}, ["2025-01-01T08:00:00Z","2025-01-01T18:00:00Z"]]}},
    {"id":"mfa","effect":"permit","actions":["read"],"resource":{"type":"doc"},
     "condition":{"==":[{"attr":"context.mfa"}, true]},
     "obligations":[{"type":"require_mfa"}]}
  ]
}

Segmented deletes (id allow-list)

{
  "rules":[
    {"id":"delete_whitelist","effect":"permit","actions":["delete"],"resource":{"type":"doc","id":"A"}},
    {"id":"no_delete_others","effect":"deny","actions":["delete"],"resource":{"type":"doc"}}
  ]
}