rronjahiri.
09/22/2023, 12:57 PMdefinition user {}
definition role {
relation project_view: user:*
relation budget_view: user:*
relation budget_edit: user:*
relation budget_approve: user:*
relation budget_submit: user:*
}
definition role_binding {
relation user: user
relation role: role
permission project_view = user & role->project_view
permission budget_view = user & role->budget_view
permission budget_edit = user & role->budget_edit
permission budget_approve = user & role->budget_approve
permission budget_submit = user & role->budget_submit
}
definition project {
relation granted: role_binding
// Synthetic Instance Relations
permission granted_view = granted->project_view
}
definition budget {
relation project: project
relation granted: role_binding
permission view = granted->budget_view + project->granted_view
permission edit = granted->budget_edit + view
permission approve = granted->budget_approve + view
permission submit = granted->budget_submit + view
}
vroldanbet
09/25/2023, 9:16 AMrole
that defines the budgetary restrictions of the role
and use it to gate permissions. Something along these lines:
caveat budget_restriction(max_budget int, proposed_budget int) {
proposed_budget <= budget_max_budget
}
definition role {
relation project_view: user:*
relation budget_view: user:*
relation budget_edit: user:*
relation budget_approve: user:*
relation budget_submit: user:*
relation budget_restricted: user:* with budget_restriction
relation ip_allowlist_restricted: user:* with ip_allowlist
permission submit_budget = budget_submit & budget_restricted
permission approve_budget = budget_approve & budget_restricted & ip_allowlist_restricted
}
Then in role_binding
you reference the new permissions instead of the relations.rronjahiri.
09/25/2023, 12:32 PM