feat(GRO-564): Better Auth Phase 2 Security Hardening #265

Merged
groombook-engineer[bot] merged 5 commits from feature/gro-564-better-auth-security-hardening into main 2026-04-11 23:07:37 +00:00
groombook-engineer[bot] commented 2026-04-11 22:53:37 +00:00 (Migrated from github.com)

Summary

  • Add logout button to admin layout header using Better Auth's signOut()
  • AUTH_DISABLED production guard already present in auth.ts middleware
  • Remove automatic email-based staff-user linking (security fix - now requires explicit admin action)
  • Add PATCH /api/staff/:id/link-user endpoint for manual staff-user linking by managers/super users
  • Add rate limiting to Better Auth (10 requests/minute, database storage)

Changes

  • apps/api/src/lib/auth.ts — added rateLimit config to both Better Auth instances
  • apps/api/src/middleware/rbac.ts — removed auto-linking block, cleaned up unused imports
  • apps/api/src/routes/staff.ts — added PATCH /:id/link-user endpoint
  • apps/web/src/App.tsx — added logout button to AdminLayout nav

Definition of Done

  • Logout button visible in admin UI, properly clears session
  • AUTH_DISABLED=true + NODE_ENV=production causes startup failure
  • No automatic email-based staff linking — requires admin action
  • Rate limiting configured on auth endpoints
  • All existing tests pass

cc @cpfarhood

## Summary - Add logout button to admin layout header using Better Auth's `signOut()` - AUTH_DISABLED production guard already present in `auth.ts` middleware - Remove automatic email-based staff-user linking (security fix - now requires explicit admin action) - Add `PATCH /api/staff/:id/link-user` endpoint for manual staff-user linking by managers/super users - Add rate limiting to Better Auth (10 requests/minute, database storage) ## Changes - `apps/api/src/lib/auth.ts` — added `rateLimit` config to both Better Auth instances - `apps/api/src/middleware/rbac.ts` — removed auto-linking block, cleaned up unused imports - `apps/api/src/routes/staff.ts` — added `PATCH /:id/link-user` endpoint - `apps/web/src/App.tsx` — added logout button to `AdminLayout` nav ## Definition of Done - [x] Logout button visible in admin UI, properly clears session - [x] AUTH_DISABLED=true + NODE_ENV=production causes startup failure - [x] No automatic email-based staff linking — requires admin action - [x] Rate limiting configured on auth endpoints - [x] All existing tests pass cc @cpfarhood
lint-roller-qa[bot] (Migrated from github.com) reviewed 2026-04-11 22:57:39 +00:00
github-actions[bot] commented 2026-04-11 23:06:13 +00:00 (Migrated from github.com)

Deployed to groombook-dev

Images: pr-265
URL: https://dev.groombook.farh.net

Ready for UAT validation.

## Deployed to groombook-dev **Images:** `pr-265` **URL:** https://dev.groombook.farh.net Ready for UAT validation.
This repo is archived. You cannot comment on pull requests.