Skip to content

Roles, Permissions & Users ​

This is what turns a single-admin app into something a whole team or customer base can use safely — who can see what, who can change what, and what a brand-new sign-up is allowed to do on day one.

1. Add a user profile collection ​

Role-based access needs a collection that represents "a person" — with name, email, and role fields. If your schema doesn't have one yet, the Schema Builder shows a one-click button for it (Add User Profile collection, or Seed User Profile if your schema is empty). This adds a ready-made collection with those fields already in place — you don't build this one by hand.

You can add your own extra fields to it too (age, department, phone number — anything about a person), the same way you'd add a field to any other collection. Note that name, email, and role themselves can't be deleted or renamed — the rest of the app depends on them.

2. Open Roles & Permissions ​

This page shows one card per role, and a permissions matrix per collection:

ColumnMeaning
FullUnrestricted access — view, create, update, and delete, all at once
ViewCan see records in this collection
CreateCan add new records
UpdateCan edit existing records
DeleteCan remove records

There's always an admin role, reserved and unrestricted — it can't be renamed, deleted, or have its permissions unchecked.

Click New Role to add another (support staff, sales, viewer — whatever fits your app), tick the boxes for what it can do in each collection, and click Save & Apply. Changes take effect immediately.

3. Set the default role for sign-ups ​

Next to each non-admin role, there's a Default on register option. Whichever role you pick here is the one automatically assigned to anyone who signs up through the app's own registration form — nobody chooses their own role, and nothing they submit can override this.

If your app has roles but no default is set, a yellow warning appears on both the Roles & Permissions page and the app dashboard. Don't ignore it: without a default, a new sign-up starts with no role at all, and once roles exist a person with no role can't do anything until you assign one by hand.

Starting from a template?

An app created from a marketplace template gets that template's roles and its default role, as long as the author had set one when they saved the template. The built-in starter templates don't include roles, so set them up yourself.

4. Manage individual users ​

The Users page lists everyone who has signed up. From here you can:

  • Change anyone's role at any time, directly from the dropdown in their row.
  • Add a user yourself — click Add User, enter their email, name, and role (plus any extra profile fields you've added). A temporary password is generated automatically and shown once, ready to copy and send to them.

Restricting people to their own records ​

Under View, Update and Delete there's an Own only checkbox on each row. Tick it and that role can only see, change or delete the records they created. A resident sees their own visitor requests, not everyone's.

  • Own only on View also limits Update and Delete. You can't change what you can't see, so those two boxes show as ticked and locked.
  • Full access is always unrestricted, so Own only doesn't apply when Full is ticked.
  • It's enforced by the server, not just hidden in the app: people only ever receive the records they're allowed to see.

Records assigned to someone ​

"Created by" isn't always the right test: staff often create a record for someone else. When an Own only box is ticked, an Owner identifier dropdown appears under the collection name. Pick a field that points at a person, and "own" also includes every record assigned to them through it:

Pick thisWhen
A reference field straight to your user profile collection, e.g. assigned_toThe record points directly at a person
A path through another collection, e.g. resident.userThe record points at a resident record, and that has a user reference to the profile

A path can go up to two steps. Once it's set, a record belongs to whoever it leads to as well as to whoever created it. To hand a record to someone, just set that field on it.

Things to know:

  • One identifier per role, per collection, and it has to be a single reference (not a multi-reference).
  • Anyone who can edit a record can change who it's assigned to, because there are no per-field permissions.
  • Records created by the server on your behalf (imports, webhooks) belong to the app's admin account, so an Own only role only sees them if they're assigned.
  • Lookups and counts see only what that person sees. A "next invoice number" or a "must be unique" check over a collection can come out wrong for someone limited to their own records.
  • The dropdown lists only fields that can lead to a person. If it says No person field available, add a reference to your user profile collection (or to a collection that has one) first, then reload the page.

When someone's access changes ​

Roles are enforced on the server the moment you click Save & Apply. Each person's device then catches up on its own: when the app opens, when it comes back online or to the foreground, and every few minutes while it's open. It isn't instant.

  • If their access grew (View newly granted, or Own only turned off) the missing records are fetched.
  • If it shrank (View removed, or Own only turned on) the records they can no longer see are removed from their device, including offline.
  • Records taken away from them (reassigned to someone else) disappear the same way.
  • Their own unsynced changes are never thrown away. If someone has edits waiting to sync in a collection they've lost access to, the server will now refuse them; the app keeps them and shows a warning pointing to Pending sync, so they can review or discard them.

Inviting people vs. open sign-up ​

In App Configuration, the Allow Registration toggle controls whether people can create their own account from the app's sign-up screen at all. Turn it off for an invite-only app, where every account is created by you from the Users page instead.

Released under no license yet — internal product, pre-launch.