Summary
GET /forms/:slug and POST /forms/:slug/submissions collapse scope='group' to the same handling as scope='staff_only' — only staff (systemTier >= 1) can read or submit. A group-scoped form should be visible to chairs/members of the attached group, not just staff.
Requirements
Context
Surfaced in the Plan 4 review (PR #2011). The events route has parallel logic for group scope; forms should match.
Files
packages/api/src/routes/forms.ts:38-42, 92-99
Summary
GET /forms/:slugandPOST /forms/:slug/submissionscollapsescope='group'to the same handling asscope='staff_only'— only staff (systemTier >= 1) can read or submit. A group-scoped form should be visible to chairs/members of the attached group, not just staff.Requirements
form.scope === 'group', plumb a group-membership check usingactor.chairedGroupIds+ a query forgroup_membershipsagainst the attached group_idpackages/api/src/routes/forms.test.tsto cover the group-scoped pathContext
Surfaced in the Plan 4 review (PR #2011). The events route has parallel logic for group scope; forms should match.
Files
packages/api/src/routes/forms.ts:38-42, 92-99