Staff vs portal end-user
Two identity stores, two entry paths — never conflated.
SolutionDesk has two distinct audiences. Mixing them up breaks security assumptions (internal notes, restricted tickets, MagicLink sessions).
Team (staff)
| Who | Employees of the SaaS that bought SolutionDesk, plus AI agents acting for the team |
| Identity | User (Better-Auth) — email, password, memberships |
| Entry | Sign up / log in at the product app |
| Sees | Everything in workspaces they belong to (subject to role) |
| Can | Create/edit tickets, leave internal notes, configure the workspace, mint API keys |
Typical roles on a membership: owner, admin, agent, member.
Portal end-user (e.g. Acme)
| Who | A person at a customer company of the host SaaS — e.g. jane@acme.com at Acme Corp |
| Identity | EndUser, keyed by the host’s externalId — not a staff login |
| Entry | Host SaaS calls the Integration API → single-use MagicLink → portal session |
| Sees | Only tickets their company is allowed to see (public / matching restricted) |
| Can | Create requests, comment on visible tickets, download attachments — never internal notes |
Golden rule
End-users never log into SolutionDesk with a password. If someone needs dashboard access, invite them as staff — do not hand them a MagicLink and call them an admin.
Story: Acme files a bug
- Jane is logged into your SaaS (not SolutionDesk).
- She clicks “Support” → your backend mints a MagicLink for Jane’s
EndUser. - Jane lands on the portal board: only Acme’s visible requests.
- She creates “Checkout button broken”.
- Your agent Alex sees the ticket on the team board, leaves an internal note (“repro on staging”), then replies publicly.
- Jane only sees the public reply — never the internal note.