Skip to content

feat: viewer role with invite-based registration#67

Merged
akifbayram merged 10 commits intomainfrom
feat/viewer-role
Mar 7, 2026
Merged

feat: viewer role with invite-based registration#67
akifbayram merged 10 commits intomainfrom
feat/viewer-role

Conversation

@akifbayram
Copy link
Owner

Summary

Adds a viewer role to the existing admin/member permission model, along with invite-based registration and per-location default join role configuration.

Viewer Role

  • New viewer role in location_members (schema updated with 3-way check constraint)
  • Viewers can browse bins and scan QR codes but cannot create, edit, delete, pin, or upload photos
  • Server-side enforcement via requireMemberOrAbove helper in bin/photo routes
  • Client-side UI guards hide action buttons, bulk actions, and FAB for viewers
  • usePermissions hook updated with canEdit / isViewer flags

Invite-Based Registration

  • REGISTRATION_MODE env var replaces REGISTRATION_ENABLED (open | invite | closed)
  • invite mode requires a valid location invite code during registration — user auto-joins that location
  • Register page shows invite code field when mode is invite; hides register link when closed

Default Join Role

  • default_join_role column on locations table (member or viewer)
  • Configurable per-location in the retention/settings dialog
  • New members joining via invite code receive the configured default role

Member Management

  • Admins can change member roles (admin/member/viewer) in the members dialog
  • Role badge and dropdown shown per member
  • Invite QR code displayed in members dialog for easy sharing

Test Plan

  • Register with REGISTRATION_MODE=invite using a valid invite code — verify auto-join with correct role
  • Register with REGISTRATION_MODE=closed — verify registration is blocked
  • Join a location with default_join_role=viewer — verify viewer role assigned
  • As viewer: verify bins are visible but create/edit/delete/pin/photo actions are hidden
  • As admin: change a member's role and verify it takes effect
  • Verify existing admin/member flows are unaffected
  • Run npx vitest run (client + server) — all tests pass

- Viewers cannot create bins (uses requireMemberOrAbove)
- Viewers cannot edit bins; members can edit items on any bin but
  metadata only on bins they created
- Viewers cannot pin bins
- Viewers cannot upload photos
- Added tests for all four restrictions
… and UI

Add requireMemberOrAbove checks to batch operations, bin duplication,
tag addition, and tag color management routes. Hide pin/duplicate/move
actions from viewers in BinDetailToolbar, filter reorganize from sidebar
for read-only users, and redirect viewers away from ReorganizePage.
@akifbayram akifbayram merged commit 7185268 into main Mar 7, 2026
2 checks passed
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