The Users module provides a complete CRUD interface for managing every account registered in SEAM. Administrators can list all users in a responsive table, open a modal form to create a new account, edit an existing user’s name, email, role, or password, and permanently delete a record. Every mutation is immediately reflected across all connected clients through the real-time EventBusDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/TheSerchCp/SEAM/llms.txt
Use this file to discover all available pages before exploring further.
data:changed event.
Table columns
The users table is driven by theUSER_COLUMNS definition. Each entry maps a human-readable label to the key returned by the API:
Validation schemas
Two schemas govern the user forms. The create schema requires all fields including a confirmed password, while the edit schema makes the password fields optional (leave blank to keep the existing password).Service functions
The service layer is a thin wrapper that delegates every call to the users repository.getUsers()
Returns the full list of registered users from
GET /users.getUserById(id)
Fetches a single user object from
GET /users/:id.createUser(data)
Registers a new account via
POST /auth/register.updateUser(id, data)
Updates an existing user via
PUT /users/:id.removeUser(id)
Permanently deletes a user account via
DELETE /users/:id.API endpoints
| Method | Path | Service function |
|---|---|---|
GET | /users | getUsers() |
GET | /users/:id | getUserById(id) |
POST | /auth/register | createUser(data) |
PUT | /users/:id | updateUser(id, data) |
DELETE | /users/:id | removeUser(id) |
Request payloads
Create user
The user’s display name. Minimum 2 characters.
A valid, unique e-mail address.
Must satisfy the application password policy.
The numeric ID of the role to assign.
Update user
Updated display name.
Updated e-mail address.
Updated role ID.
New password. Omit this field to leave the password unchanged.
Real-time updates
The users page subscribes to two EventBus channels so the table stays fresh for all connected clients without a manual refresh.shouldUpdatePage('users', operation) helper checks against the OPERATION_LISTENERS.users array:
Cleanup unsubscribers are registered with
registerPageCleanup() so EventBus listeners are removed when the router navigates away from the Users page, preventing memory leaks and duplicate updates.