feat(activity): add binding to views

This commit is contained in:
2026-03-28 13:03:12 +01:00
parent b3d9c8dbce
commit bfcbf15379
5 changed files with 247 additions and 0 deletions
+28
View File
@@ -80,10 +80,12 @@ erDiagram
activities ||--o{ rules : "action"
activities ||--o{ activity_hierarchy : "parent"
activities ||--o{ activity_hierarchy : "child"
activities ||--o{ activity_view_bindings : "restricted_to"
views ||--o{ rules : "target"
views ||--o{ view_hierarchy : "parent"
views ||--o{ view_hierarchy : "child"
views ||--o{ activity_view_bindings : "allowed_for"
contexts ||--o{ rules : "condition"
@@ -199,6 +201,32 @@ Administration meta-policies for delegated management.
**Behavior:** Enables organization-scoped administrators without database superuser privileges.
**morbac.activity_view_bindings**
Optional whitelist of valid (activity, view) pairs for rule creation.
**Key columns:**
- `activity`: Activity to restrict
- `view`: Permitted view for that activity
**Behavior:** Opt-in per activity. If any binding exists for an activity, rules (including cross-org rules) can only use listed views. Activities with no bindings are unconstrained. Enforced at the database level via triggers on `morbac.rules` and `morbac.cross_org_rules`.
```sql
-- Restrict 'approve' to invoices and contracts only
INSERT INTO morbac.activity_view_bindings (activity, view) VALUES
('approve', 'invoices'),
('approve', 'contracts');
-- This succeeds
INSERT INTO morbac.rules (..., activity, view, ...) VALUES (..., 'approve', 'invoices', ...);
-- This raises an exception
INSERT INTO morbac.rules (..., activity, view, ...) VALUES (..., 'approve', 'user_profiles', ...);
-- Remove all bindings to lift the restriction
DELETE FROM morbac.activity_view_bindings WHERE activity = 'approve';
```
## Core Concepts
### Deontic Modalities