Production infrastructure for AI agents
Website · Documentation · Guides · Core · Template · Discord
systemprompt-users
Your users, your database, your access rules. Role-based access control (UserRole: Admin, User, Anonymous), sessions, API keys, device certificates, federated identities, and IP bans, all held in your PostgreSQL rather than a third-party directory.
Layer: Domain — business-logic modules that implement systemprompt.io features. Part of the systemprompt-core workspace.
Overview
Capabilities · Compliance
This crate provides user management functionality including:
- User CRUD operations with typed identifiers
- Session management (list, end, cleanup, existence checks)
- Role-based access control with policy-aware promotion/demotion
- API key issuance, hashing, and verification
- Device certificate enrollment and rotation
- IP banning with expiration and metadata tracking
- Anonymous user lifecycle management and scheduled cleanup
- Bulk operations and aggregate statistics
Usage
[]
= "0.21"
use DbPool;
use ;
let user_service = new?;
let user = user_service.find_by_email.await?;
let admins = user_service.find_by_role.await?;
let stats = user_service.get_stats.await?;
Module Layout
| Module | Purpose |
|---|---|
models/ |
User, UserSession, UserActivity, UserStats, UserApiKey, UserDeviceCert, and related records. |
repository/ |
Compile-time-verified persistence: user/ (find, list, stats, operations, merge, session), api_key, device_cert, federated_identity, and banned_ip/. |
services/ |
UserService (primary), UserAdminService, ApiKeyService, and DeviceCertService. |
jobs/ |
CleanupAnonymousUsersJob scheduled anonymous-user cleanup. |
Schema DDL lives in schema/*.sql (users, user_sessions, user_api_keys, user_device_certs, federated_identities, banned_ips, and the analytics views) with migrations in schema/migrations/.
Public Exports
Models
User— Core user entity with id, name, email, roles, statusUserSession— Session with timestamps and device infoUserActivity— User activity summary (last active, counts)UserWithSessions— User with active session countUserStats— Aggregate statistics (totals, breakdowns)UserCountBreakdown— Counts by status and roleUserApiKey— Stored API key recordNewApiKey— Plaintext key returned at issuanceUserDeviceCert— Stored device certificate recordUserExport— Export-friendly user representation
Enums
UserStatus— Active, Suspended, Deleted (re-exported fromsystemprompt-models)UserRole— Admin, User, Anonymous (re-exported fromsystemprompt-models)
Services
UserService— Primary service implementingUserProviderandRoleProviderUserAdminService— Admin operations (promote, demote)ApiKeyService— Issue, hash, and verify API keysDeviceCertService— Enroll and rotate device certificates
Repositories
UserRepository— User database operationsBannedIpRepository— IP ban management
Types
UpdateUserParams— Multi-field user update structMergeResult— Result of merging two usersIssueApiKeyParams— Parameters forApiKeyService::issueEnrollDeviceCertServiceParams— Parameters forDeviceCertService::enrollCreateApiKeyParams— Repository-level API key creation parametersEnrollDeviceCertParams— Repository-level device cert parametersBanDuration— Hours, Days, or PermanentBanIpParams— Basic ban parametersBanIpWithMetadataParams— Ban with offense trackingBannedIp— Active ban recordPromoteResult/DemoteResult— Outcomes of admin role transitionsAPI_KEY_PREFIX— Canonical user-facing key prefix
Extension
UsersExtension— Schema and job registration entry point
Traits (re-exported)
UserProvider— User lookup and creationRoleProvider— Role management
Error Handling
UserError— Domain-specific errors (NotFound,EmailAlreadyExists, …)Result<T>/UserResult<T>— Aliases forstd::result::Result<T, UserError>
Dependencies
| Crate | Purpose |
|---|---|
systemprompt-database |
DbPool for database access |
systemprompt-extension |
Extension trait for schema/job registration |
systemprompt-traits |
UserProvider, RoleProvider, Job traits |
systemprompt-identifiers |
UserId, SessionId typed identifiers (sqlx feature) |
systemprompt-models |
UserRole, UserStatus enums |
systemprompt-provider-contracts |
Job registration macro |
License
BSL-1.1 (Business Source License). Source-available for evaluation, testing, and non-production use. Production use requires a commercial license. Each version converts to Apache 2.0 four years after publication. See LICENSE.
systemprompt.io · Documentation · Guides · Live Demo · Template · crates.io · docs.rs · Discord
Domain layer · Own how your organization uses AI.