Teams & sharing/settings/team

Colleagues, clients, and read-only links

Access control in an analytics tool is usually a hidden button. Falorb re-derives the caller's role on the server for every mutation, because a server action is a public endpoint and a hidden button is not a check.

The team page: current members with their roles, a role reference, and pending invitations.The team page: current members with their roles, a role reference, and pending invitations.
Members, roles and invitations

Four roles, one definition

Owner, admin, member, viewer, defined once in a shared package so the API and the dashboard cannot disagree about what a member may do. Project settings, goals, alerts, channels, sharing, keys and team membership all check it independently on the server.

A roles reference panel describing what owner, admin, member and viewer can each do.A roles reference panel describing what owner, admin, member and viewer can each do.

Invitations that a forwarded link cannot exploit

Tokens are stored hashed, expire after seven days, and acceptance is bound to the address the invitation was sent to, so forwarding the email grants nothing. Membership and consumption of the invite happen in one transaction, so a half-accepted invitation is not a state that exists.

A pending invitations panel listing invited email addresses, roles and expiry.A pending invitations panel listing invited email addresses, roles and expiry.

The last owner cannot lock everybody out

The only owner of a workspace cannot be demoted or removed. It is a small guard that prevents the specific irreversible accident of an organisation with data and nobody able to administer it.

A members panel listing people in the workspace with their role and last activity.A members panel listing people in the workspace with their role and last activity.

A read-only link for people who should not have an account

A property summary can be published at an unguessable token, for a client, an investor or a public transparency page. It is scoped to that property and read-only, and it can be revoked from settings.

A share control showing the generated public link for a property with copy and revoke actions.A share control showing the generated public link for a property with copy and revoke actions.
Specifics

How it works, precisely

Roles
owner > admin > member > viewer, defined in @falorb/db/roles
Enforcement
Re-derived server-side on every mutation
Invitations
Hashed token, 7-day expiry, bound to the invited address
Public link
Per-property, read-only, revocable

Run it yourself this afternoon

Clone the repository, bring up the stack with Docker Compose, paste one script tag. The data never leaves your machines.