Skip to content

Read-only (viewer) role for project members - #50

Merged
ralyodio merged 1 commit into
masterfrom
feat/read-only-members
Jun 11, 2026
Merged

ralyodio merged 1 commit into
masterfrom
feat/read-only-members

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Lets a project owner invite someone by email to view stats (free signup, no payment) without granting edit access.

What it does

  • Members tab invite form gets an access-level selector: Member (can edit) vs Read-only (view stats)
  • Each member shows a role badge + a Make read-only / Make editor toggle
  • Read-only members can view everything (all tabs/stats) but cannot change anything

Enforcement (DB-level, two layers)

  1. RLS — is_project_editor() gates every member write policy (projects update, project_repos insert, tracker_integrations insert/update/delete, lx_site insert/update). All SELECT policies unchanged, so viewers keep full read access.
  2. API gate — requireProjectAccess() rejects viewers by default (backstop for service-role write paths that bypass RLS). Read-only endpoints (live-events, run status/markdown) opt in with allowViewer.

Migration

20260611120000_project_member_viewer_role.sql — already applied to production DB. Adds role to project_members and project_invitations, plus is_project_editor().

🤖 Generated with Claude Code

Lets a project owner invite someone by email to view stats (free signup,
no payment) without granting edit access.

DB (migration 20260611120000):
- project_members.role and project_invitations.role ('member' | 'viewer')
- is_project_editor() helper (members minus viewers, plus org owner/member)
- every member WRITE policy (projects update, project_repos insert,
  tracker_integrations insert/update/delete, lx_site insert/update) now
  requires editor; all SELECT policies unchanged so viewers keep read access

App:
- requireProjectAccess() rejects viewers by default (write gate); read-only
  endpoints (live-events, run status/markdown) opt in with allowViewer
- invite/accept carries role; Members UI: role selector on invite, role
  badge per member, Make read-only / Make editor toggle, setProjectMemberRole

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

vu1nz Security Review

0 finding(s) in PR #?

No security issues found.

@ralyodio
ralyodio merged commit 1b2bf61 into master Jun 11, 2026
6 checks passed
@ralyodio
ralyodio deleted the feat/read-only-members branch June 11, 2026 15:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant