fix: is_allowed_nocache resolves roles once per org, not per rule
release / release (push) Canceled after 0s

Steps 1, 2, 4 and 5 called get_comprehensive_roles() for every row of
morbac.rules (and org_in_scope() per row), so a decision cost grew with
every tenant's rules: ~240 ms with 2376 rules across 27 orgs. Roles are now
resolved once per org where the user can hold one and that has a rule for
the request, rules are read through those (org, role) pairs, and
org_in_scope() runs once per (org, scope) pair. Decisions are unchanged.

Release 1.0.1 with the 1.0.0 -> 1.0.1 upgrade script. Test 17 compares
every decision with the 1.0.0 body on a seeded random fixture and checks
the cost no longer follows unrelated tenants' rules. bump_version.sh no
longer rewrites the PGXN meta-spec version.
This commit is contained in:
2026-10-14 23:41:00 +02:00
parent 3e8380d4f7
commit 1cf23c37ce
9 changed files with 931 additions and 51 deletions
+3 -3
View File
@@ -2,7 +2,7 @@
"name": "pgmorbac",
"abstract": "Multi-OrBAC: Organization-Based Access Control with multi-organization support",
"description": "A PostgreSQL extension implementing the Multi-OrBAC access control model \u2014 enabling organization-centric, context-aware, and hierarchical access control with delegation, separation of duty, and cross-organizational policies.",
"version": "1.0.0",
"version": "1.0.1",
"maintainer": [
"Marc VILLAIN <marc.villain@epita.fr>"
],
@@ -10,8 +10,8 @@
"provides": {
"pgmorbac": {
"abstract": "Multi-OrBAC access control extension",
"file": "pgmorbac--1.0.0.sql",
"version": "1.0.0"
"file": "pgmorbac--1.0.1.sql",
"version": "1.0.1"
}
},
"prereqs": {