User Management
Overview
Admins can view, search, filter, lock/unlock, delete, and assign roles to all registered members. User accounts are linked to Keycloak and maintain a local UserEntity for profile and platform data.
Workflow
Step-by-Step: Search and Filter Users
- Navigate to Admin → User Management (
/admin/users). - Use the search box to find users by name or email.
- Use the role filter dropdown to filter by ROLE_USER, ROLE_MODERATOR, ROLE_ADMIN.
- Results are paginated — use next/previous to navigate.
Step-by-Step: Lock / Unlock an Account
- Find the user in the list and click their row to open the detail view.
- Click "Lock Account" to prevent login.
- The Keycloak session is revoked immediately.
- The user cannot log in until unlocked.
- Click "Unlock Account" to restore access.
Step-by-Step: Assign Roles
- Open the user detail view.
- Click "Edit Roles".
- Toggle the desired roles: USER, MODERATOR, ADMIN.
- Click "Save".
- Role changes are logged in
AuditLogEntitywith actor, IP, and timestamp.
ROOT_ADMIN role
The ROOT_ADMIN role cannot be assigned or revoked via the API. It must be managed directly in the Keycloak admin console.
Step-by-Step: Soft-Delete a User
- Open the user detail view.
- Click "Delete User" → confirm the dialog.
- The user's
deletedAttimestamp is set (soft-delete). - The user is excluded from all queries, leaderboards, and member lists.
- GDPR: personal data is retained for the legally required period, then purged by the nightly GDPR purge job (daily 04:00 UTC).
Application Properties
No custom properties. Role changes are governed by:
| Property | Default | Description |
|---|---|---|
rcb.security.trusted-jwt-issuers | Keycloak realm URL | JWT validation |
Security Notes
- All role changes are logged to
AuditLogEntitywith: actor (who made the change), target user, action, IP address, timestamp. Full audit trail for GDPR compliance. ROOT_ADMINcannot be modified via API — Keycloak-only.- Locked accounts cannot authenticate — Keycloak session is revoked on lock.
- Soft-deleted users are completely invisible in all platform queries.
QA Checklist
- Search user by email → correct user found
- Filter by MODERATOR role → only moderators listed
- Lock user → user cannot log in
- Unlock user → user can log in again
- Assign MODERATOR role → user gains moderator permissions
- Remove MODERATOR role → user loses moderator permissions
- Delete user → user excluded from all lists and leaderboards
- Role change logged in AuditLogEntity → visible with actor, action, timestamp