Skip to main content

F-003 Access Control and Visibility Boundaries

AttributeValue
ProjectOpen Projects Hub
Version2.0
StatusAccepted
ReadinessReady for Implementation
OwnerProduct Owner

Context​

  • Problem: MVP requires strict role boundaries between the Admin and Members of a workspace, workspace data isolation, and a narrow public surface for clients.
  • Primary Persona: Admin and Member (accounts); Client Stakeholder (no account, see F-011).
  • In Scope: Admin/Member RBAC within a workspace, workspace data isolation, the public read-only Client Review route as the only anonymous data access.
  • Out of Scope: Cross-workspace collaboration, custom/configurable roles, client accounts (superseded by ADR-020).

Functional Requirements​

IDRequirementSourcePriorityOwner (DRI)Decision Traceability (Q-ID)Acceptance CriteriaStatus
FR-003-01The system enforces role-based access control with Admin (full CRUD plus team management) and Member (full CRUD, no team management).Open Questions Q-010, Q-011MustProduct OwnerQ-010, Q-011, ADR-020Member accounts can create, edit, and delete clients, projects, and stories, but cannot add or remove another user or rename the workspace.Clarified
FR-003-02Every account belongs to exactly one workspace; a workspace's data is never visible to another workspace's users. Only an Admin can add Members, and only to their own workspace, and never as a second Admin. A workspace holds at most 5 users in total (Admin and Members; inactive and unverified accounts count).Open Questions Q-012MustProduct OwnerQ-012A record belonging to another workspace answers 404 for every role, never 403; POST /users with role: admin is rejected; POST /users for a sixth user answers 409.Clarified
FR-003-03Client stakeholders can read a project's approved requirements and current phase without an account, through its project access code.User Personas (Client Stakeholder)ShouldProduct OwnerADR-020GET /viewer/{accessCode} returns approved stories and the phase for exactly the project the code names; see F-011.Clarified
FR-003-04The system enforces a role and workspace permission matrix across all resource types.EP4 implementationMustTech LeadQ-012See permission matrix below; verified by an automated route-access-policy test enumerating every registered route.Clarified

Permission Matrix​

CapabilityAdminMemberAnonymous (access code)
Clients: list / get / create / update / delete✅✅❌
Projects: list / get✅✅❌
Projects: create / update / archive / reactivate / delete✅✅❌
Project access code: view / regenerate✅✅❌
Stories, backlog: read✅✅✅ (approved stories of the one project the code names)
Stories, backlog: create / update / delete / assign / export✅✅❌
Refinement (AI drafts): read, generate, approve✅✅❌
Dashboard✅✅❌
Own AI provider keys and credits✅✅❌
Team: list workspace users✅✅❌
Team: add / deactivate / delete a Member✅❌❌

Feature-Scoped Non-Functional Requirements​

IDRequirementMetric / TargetPriorityOwner (DRI)Decision Traceability (Q-ID)Status
NFR-003-01Role and visibility controls align with security baseline requirements.Satisfies NFR-X01 security baseline (OWASP Top 10, rate limiting, credential protection).MustTech LeadQ-010, Q-011Clarified
NFR-003-02Client-facing requirement views remain readable for non-technical stakeholders.The Client Review Portal shows plain-language titles, descriptions, and acceptance criteria.ShouldProduct Owner—Clarified
NFR-003-03Client and freelancer requirement workflows satisfy accessibility baseline expectations.Requirements views meet WCAG 2.1 AA for contrast, keyboard navigation, and screen reader labels.ShouldUI/UX Lead—Clarified
NFR-003-04Session security enforced per cross-cutting session management baseline.Satisfies NFR-X09 (session timeout, forced logout, concurrent session policy, refresh token rotation).MustTech Lead—Clarified

Dependencies and Risks​

  • Dependencies: Authorization policy layer, UI permissions gating, export filtering logic, F-011 Client Review Access for the public access-code route.
  • Risks: Data leakage via the one public route; mitigation is deny-by-default checks (an automated route-access-policy test lists every public route), unguessable access codes, rate limiting, and a response that names no workspace, client, or user.

Traceability​


Last Updated: 2026-10-02