Make email and phone unique per business, not platform-wide
One person could not work for two businesses, and signup and staff creation told anyone whether an email or phone was registered anywhere on the platform. - User email and phone are now unique per business: indexes on (businessId, email) and (businessId, phoneNumber). Duplicate checks in signup and branch-manager creation are scoped to the business, so they no longer reveal other businesses' users. - Login finds the email in every business and checks the password against each account. One match signs straight in; several return 300 with the businesses to choose from, and the login page shows a picker. A wrong password returns the same 401 as before and reveals nothing; failures count against each candidate account, and a correct password only resets the accounts it opens. - Platform-operator access now also needs a platformAdmin flag on the account. With per-business emails, an email match alone would have let any owner create a staff account with the operator's email and open the cross-tenant console. The flag is only set by the seed and the migration; removing the email from PLATFORM_ADMIN_EMAILS still revokes. - npm run migrate:identity flags today's operators (while each listed email still matches one account) and syncs the User indexes, dropping the old unique email_1 and phoneNumber_1. Checked against a database in the old shape; safe to re-run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+4
-2
@@ -13,8 +13,10 @@ JWT_REFRESH_TTL=30d
|
||||
DELIVERY_MAX_DEVICES=2
|
||||
|
||||
# ---- Platform operator ----
|
||||
# Comma-separated emails with cross-tenant access to /platform. Create these
|
||||
# accounts with `npm run seed`; public signup refuses these addresses.
|
||||
# Comma-separated emails with cross-tenant access to /platform. The account
|
||||
# must also carry the platformAdmin flag, set only by `npm run seed` or
|
||||
# `npm run migrate:identity`. Removing an email here revokes access.
|
||||
# Public signup refuses these addresses.
|
||||
PLATFORM_ADMIN_EMAILS=
|
||||
|
||||
# ---- Invite links ----
|
||||
|
||||
Reference in New Issue
Block a user