The hotel ID, and who may see what
Sign-in is a hotel ID, an email and a password; row-level security in the database decides what that login may see; a platform user sees nothing until a hotel has let them in.
The first thing a person types is which hotel they belong to. The second and third are who they are. Everything after that is decided in the database, not in the application: a policy on every table says which rows this login may read and which it may write, and a query that forgets to filter still cannot see across the line.
Default deny
A login has access to no hotel until it has been given one. A hotel added to a group is invisible to every existing login until an administrator says otherwise. The rule is written as a policy, tested by a suite that signs in as the application role, and it has caught two regressions before they shipped.
A group
A group is an account with many hotels. A group login sees the hotels it was given; the owner sees all of them; the central desk, the CRM and the heatmap read as many rows as the login may.
The platform is outside
A platform user — our support — stands outside every account and sees nothing inside one. Entering an account is a grant the account gives, time-boxed, logged, and visible to the account afterwards.