Users
The Users page at /admin/users is your roster. Every Wisteria account belongs to your workspace and only your workspace — there’s no cross-tenant user concept.
Adding a single user
Click + Add user at the top right.
Fill in:
- Full name
- Email — must be unique across all of Wisteria (not just your workspace; this is a Supabase Auth constraint)
- Role — super_admin, content_manager, trainer, auditor, or learner
- Department — required for trainers; optional for learners (but recommended); not enforced for content_manager/auditor/super_admin
Wisteria generates a temporary password and emails it to the user. They’ll be forced to set a real password on first sign-in.
Bulk-uploading users
Click Bulk upload at the top right. Download the template .xlsx — it has columns:
| Column | Required | Notes |
|---|---|---|
| Yes | Must be unique | |
| full_name | Yes | |
| role | No | Defaults to learner if blank |
| department | Recommended | Must match an existing department exactly |
Fill in the rows, save, and upload. Wisteria validates the file, shows you what’ll be created (and any errors), and creates the accounts in one transaction.
Each user gets a welcome email with their temporary password.
Common gotchas:
- Email already exists — that user is already in Wisteria (possibly someone else’s workspace). Contact support.
- Department not found — you typed it differently from the spelling in Settings → Departments. Re-check casing and whitespace.
- Invalid role — the role column must be one of the five exact values. Typos fail validation.
Editing a user
Click any row. The user detail panel opens:
- Change name
- Change role
- Change department
- Activate / deactivate
- Delete
Every edit is recorded in the audit log.
Deactivate vs delete
| Action | What happens | When to use |
|---|---|---|
| Deactivate | User can’t sign in. Their data is preserved. Reactivating restores access. | Person on long leave, contractor between engagements, someone you’re not sure about yet. |
| Delete | Profile row removed; assignments, progress, quiz results, certificates, recerts cascade-deleted. Audit log entries authored by this user are preserved (they show “Unknown”). The email is freed for re-registration. | Person has permanently left and you’re sure you don’t need their data. |
Delete is destructive and irreversible. Wisteria requires you to type-to-confirm before the button enables.
Constraints
- You can’t change your own role.
- You can’t deactivate or delete the last active super_admin in the workspace.
- You can’t delete yourself.
These are enforced server-side; client-side UI hides the buttons too.
Resending an invite
If a user hasn’t signed in yet and lost their welcome email, click their row → Resend invite. Wisteria generates a fresh temporary password and re-emails it. The previous temporary password is invalidated.
Trainer-scoped Users view
Trainers see this same page but scoped to learners in their own department only. They can’t browse the entire workspace’s people. Super admins and content managers see everyone.