Symptom
An Application granted to a group is still invisible to members of that group: GET /api/applications returns 200 with an empty list for both an editor and a viewer.
Measured on a live instance
Everything openbuild-side checks out:
| Checked |
Result |
| Stored grant |
{owners:['user:admin'], editors:['group:rbac-editors'], viewers:['group:rbac-viewers']} — reads back correctly |
| Group membership |
rbac-viewer ∈ rbac-viewers, rbac-editor ∈ rbac-editors (OCS cloud/users/{uid}/groups) |
| Groups exist |
admin, openregister, rbac-editors, rbac-viewers |
| Principal grammar |
PermissionResolver::matchesCaller() classifies group: principals and intersects them with the caller's groups |
| Result |
GET /api/applications → 200, empty, for both users |
So the manifest permissions block is correct and the matcher supports it, yet the object never reaches the filter. Most likely candidate: OpenRegister-level object visibility — a grant separate from openbuild's permissions block. Worth checking whether the list is scoped by OR organisation/RBAC before openbuild's own check runs.
Why it matters beyond tests
If group grants don't confer visibility, then in the product an owner can add a team to an app and those users still see nothing — the affordance exists and does not work.
Blocks
tests/e2e/versionRouting.spec.ts 9.2 (viewer sees version-not-found, not a stack trace)
tests/e2e/schema-access-scopes-rbac.spec.ts (3 scenarios: lock-out warning, draft-vs-production scope isolation, disabled Access sub-editor on production)
- the real viewer-gating assertion omitted from
save-as-template.spec.ts
Groundwork is already in the repo: tests/e2e/support/appRoles.ts writes the grant correctly (carrying the whole record forward — OR saves are PUT-semantic) and documents these findings inline. The RBAC users and one stored session per role are provisioned by globalSetup (#66). Once a member can see the app, those four scenarios should be straightforward.
Symptom
An Application granted to a group is still invisible to members of that group:
GET /api/applicationsreturns 200 with an empty list for both an editor and a viewer.Measured on a live instance
Everything openbuild-side checks out:
{owners:['user:admin'], editors:['group:rbac-editors'], viewers:['group:rbac-viewers']}— reads back correctlyrbac-viewer∈rbac-viewers,rbac-editor∈rbac-editors(OCScloud/users/{uid}/groups)admin, openregister, rbac-editors, rbac-viewersPermissionResolver::matchesCaller()classifiesgroup:principals and intersects them with the caller's groupsGET /api/applications→ 200, empty, for both usersSo the manifest
permissionsblock is correct and the matcher supports it, yet the object never reaches the filter. Most likely candidate: OpenRegister-level object visibility — a grant separate from openbuild'spermissionsblock. Worth checking whether the list is scoped by OR organisation/RBAC before openbuild's own check runs.Why it matters beyond tests
If group grants don't confer visibility, then in the product an owner can add a team to an app and those users still see nothing — the affordance exists and does not work.
Blocks
tests/e2e/versionRouting.spec.ts9.2 (viewer sees version-not-found, not a stack trace)tests/e2e/schema-access-scopes-rbac.spec.ts(3 scenarios: lock-out warning, draft-vs-production scope isolation, disabled Access sub-editor on production)save-as-template.spec.tsGroundwork is already in the repo:
tests/e2e/support/appRoles.tswrites the grant correctly (carrying the whole record forward — OR saves are PUT-semantic) and documents these findings inline. The RBAC users and one stored session per role are provisioned byglobalSetup(#66). Once a member can see the app, those four scenarios should be straightforward.