Better Auth in Rust

Admin

User management, banning, impersonation, and role management for administrators.

The AdminPlugin provides administrative endpoints for user management. Route access is permission-based and follows the TypeScript Better Auth admin plugin behavior. By default, the built-in admin role has full admin permissions and user has none.

Setup

These examples assume you've already defined AppAuthSchema. If you want a complete setup from entity definitions through Axum mounting, start with the Axum integration guide.

use better_auth::plugins::AdminPlugin;

let auth = BetterAuth::<AppAuthSchema>::new(config)
    .store(store)
    .plugin(AdminPlugin::new())
    .build()
    .await?;

Configuration

use better_auth::plugins::admin::AdminConfig;

let auth = BetterAuth::<AppAuthSchema>::new(config)
    .store(store)
    .plugin(
        AdminPlugin::new()
            .default_role("user")
            .admin_roles(vec!["admin".to_string(), "superadmin".to_string()])
            .admin_user_ids(vec!["bootstrap-admin-id".to_string()])
            .default_ban_reason("No reason".to_string())
            .default_ban_expires_in(60 * 60 * 24)
            .allow_impersonating_admins(false)
    )
    .build()
    .await?;
OptionTypeDefaultDescription
default_roleString"user"Default role for new users and role-less permission checks
admin_rolesVec<String>["admin"]Roles treated as admin for target-admin checks
admin_user_idsOption<Vec<String>>NoneUser IDs that always bypass admin permission checks
rolesHashMap<String, RolePermissions>built-in admin / user when unsetCustom permission definitions that replace the built-in defaults when provided
default_ban_reasonOption<String>NoneDefault reason used by /admin/ban-user
default_ban_expires_inOption<i64>NoneDefault ban duration in seconds
impersonation_session_durationOption<i64>NoneOverride impersonation session lifetime in seconds
banned_user_messageStringupstream default messageMessage shown when a banned user is blocked
allow_impersonating_adminsboolfalseWhether admin targets may be impersonated

API Endpoints

The Admin plugin exposes 15 endpoints. For full request/response details, see the OpenAPI Reference.

User Management

EndpointMethodDescription
/admin/get-userGETFetch one user by id
/admin/create-userPOSTCreate a new user
/admin/update-userPOSTUpdate a user
/admin/list-usersGETList users with pagination, search, and filtering
/admin/set-rolePOSTSet a user's role
/admin/set-user-passwordPOSTReset a user's password
/admin/remove-userPOSTPermanently delete a user

/admin/create-user creates a credential account only when a non-empty password is provided. Omitting the password creates a passwordless user, matching the upstream TypeScript behavior.

Ban Management

EndpointMethodDescription
/admin/ban-userPOSTBan a user (optional reason and duration)
/admin/unban-userPOSTUnban a user

Impersonation

EndpointMethodDescription
/admin/impersonate-userPOSTCreate a session as another user
/admin/stop-impersonatingPOSTEnd impersonation, return to admin session

Session Management

EndpointMethodDescription
/admin/list-user-sessionsPOSTList all sessions for a user
/admin/revoke-user-sessionPOSTRevoke a single session
/admin/revoke-user-sessionsPOSTRevoke all sessions for a user

Permissions

EndpointMethodDescription
/admin/has-permissionPOSTCheck if current user has a permission

Errors

StatusCondition
401Not authenticated
403Current user lacks the required admin permission
404Target user not found
400Validation or admin-plugin bad request error

On this page