pub struct AuthFramework { /* private fields */ }Expand description
The primary authentication and authorization framework for Rust applications.
AuthFramework is the central component that orchestrates all authentication
and authorization operations. It provides a unified interface for multiple
authentication methods, token management, session handling, and security monitoring.
§Core Capabilities
- Multi-Method Authentication: Support for password, OAuth2, MFA, passkeys, and custom methods
- Token Management: JWT token creation, validation, and lifecycle management
- Session Management: Secure session handling with configurable storage backends
- Permission System: Role-based and resource-based authorization
- Security Monitoring: Real-time threat detection and audit logging
- Rate Limiting: Configurable rate limiting for brute force protection
§Thread Safety
The framework is designed for concurrent use and can be safely shared across
multiple threads using Arc<AuthFramework>.
§Storage Backends
Supports multiple storage backends:
- In-memory (for development/testing)
- Redis (for production with clustering)
- PostgreSQL (for persistent storage)
- Custom implementations via the
AuthStoragetrait
§Example
use auth_framework::{AuthFramework, AuthConfig};
use auth_framework::authentication::credentials::Credential;
use auth_framework::methods::AuthMethodEnum;
// Create framework with default configuration
let config = AuthConfig::default();
let mut auth = AuthFramework::new(config);
// Register an authentication method
auth.register_method("password", password_method);
// Authenticate a user
let result = auth.authenticate("password", credential).await?;§Security Considerations
- All tokens are signed with cryptographically secure keys
- Session data is encrypted at rest when using persistent storage
- Rate limiting prevents brute force attacks
- Audit logging captures all security-relevant events
- Configurable security policies for enterprise compliance
Implementations§
Source§impl AuthFramework
impl AuthFramework
Sourcepub fn users(&self) -> UserOperations<'_>
pub fn users(&self) -> UserOperations<'_>
Access focused user-management operations.
Sourcepub fn sessions(&self) -> SessionOperations<'_>
pub fn sessions(&self) -> SessionOperations<'_>
Access focused session-management operations.
Sourcepub fn tokens(&self) -> TokenOperations<'_>
pub fn tokens(&self) -> TokenOperations<'_>
Access focused token-management operations.
Access focused authorization operations.
Sourcepub fn mfa(&self) -> MfaOperations<'_>
pub fn mfa(&self) -> MfaOperations<'_>
Access focused multi-factor authentication operations.
Sourcepub fn monitoring(&self) -> MonitoringOperations<'_>
pub fn monitoring(&self) -> MonitoringOperations<'_>
Access focused monitoring and health operations.
Sourcepub fn audit(&self) -> AuditOperations<'_>
pub fn audit(&self) -> AuditOperations<'_>
Access focused audit log operations.
Sourcepub fn maintenance(&self) -> MaintenanceOperations<'_>
pub fn maintenance(&self) -> MaintenanceOperations<'_>
Access focused maintenance operations.
Sourcepub async fn runtime_config(&self) -> RuntimeConfig
pub async fn runtime_config(&self) -> RuntimeConfig
Read the current runtime-mutable configuration.
Sourcepub async fn update_runtime_config(
&self,
update: RuntimeConfig,
) -> Result<RuntimeConfig>
pub async fn update_runtime_config( &self, update: RuntimeConfig, ) -> Result<RuntimeConfig>
Apply a partial or full update to the runtime-mutable configuration.
The update is applied atomically. Returns the updated configuration.
Returns Err if any field value is out of range (e.g. zero token lifetime).
Sourcepub fn admin(&self) -> AdminOperations<'_>
pub fn admin(&self) -> AdminOperations<'_>
Access focused advanced administration operations (ABAC, delegation, role hierarchy).
Sourcepub fn new(config: AuthConfig) -> Self
pub fn new(config: AuthConfig) -> Self
Create a new authentication framework.
This method is infallible and creates a basic framework instance.
Configuration validation and component initialization is deferred to initialize().
An ephemeral random secret is used for the token manager until initialize()
replaces it with the configured secret. Tokens issued before initialization
will NOT be valid afterwards.
Sourcepub fn new_validated(config: AuthConfig) -> Result<Self>
pub fn new_validated(config: AuthConfig) -> Result<Self>
Create a new authentication framework with validation.
This method validates the configuration immediately and returns an error if the configuration is invalid. Use this when you want early validation.
Sourcepub fn replace_storage(&mut self, storage: Arc<dyn AuthStorage>)
pub fn replace_storage(&mut self, storage: Arc<dyn AuthStorage>)
Replace the storage backend with a custom implementation.
This will swap the internal storage Arc so subsequent operations use the provided storage instance. Implementations that rely on a different concrete storage may need additional reconfiguration by the caller.
Sourcepub fn set_distributed_store(&mut self, store: Arc<dyn DistributedSessionStore>)
pub fn set_distributed_store(&mut self, store: Arc<dyn DistributedSessionStore>)
Replace the distributed session store.
Call this during application startup after configuring a distributed cache
(Redis, Valkey, Hazelcast, etc.) so that
coordinate_distributed_sessions
reports accurate cross-node session counts instead of 0.
Sourcepub fn new_with_storage(
config: AuthConfig,
storage: Arc<dyn AuthStorage>,
) -> Self
pub fn new_with_storage( config: AuthConfig, storage: Arc<dyn AuthStorage>, ) -> Self
Convenience constructor that creates a framework with a custom storage instance.
Sourcepub fn register_method(
&mut self,
name: impl Into<String>,
method: AuthMethodEnum,
)
pub fn register_method( &mut self, name: impl Into<String>, method: AuthMethodEnum, )
Register an authentication method.
Sourcepub async fn initialize(&mut self) -> Result<()>
pub async fn initialize(&mut self) -> Result<()>
Initialize the authentication framework.
This method performs configuration validation, sets up secure components, and prepares the framework for use. It must be called before any other operations.
§Security Note
This method validates JWT secrets and replaces any temporary secrets with properly configured ones for production security.
Sourcepub async fn authenticate(
&self,
method_name: &str,
credential: Credential,
) -> Result<AuthResult>
pub async fn authenticate( &self, method_name: &str, credential: Credential, ) -> Result<AuthResult>
Authenticate a user with the specified method.
method_name must match a previously registered authentication method
(e.g. "password", "jwt", "oauth2").
§Returns
AuthResult::Success— authentication succeeded; contains the issued token.AuthResult::MfaRequired— first factor passed but MFA is required.AuthResult::Failure— invalid credentials.
§Example
let result = auth.authenticate("password", Credential::password("alice", "S3cur3P@ss!")).await?;
match result {
AuthResult::Success(token) => println!("Token: {}", token.access_token),
AuthResult::MfaRequired(challenge) => println!("MFA needed: {:?}", challenge),
AuthResult::Failure(msg) => eprintln!("Login failed: {msg}"),
}Sourcepub async fn authenticate_with_metadata(
&self,
method_name: &str,
credential: Credential,
metadata: CredentialMetadata,
) -> Result<AuthResult>
pub async fn authenticate_with_metadata( &self, method_name: &str, credential: Credential, metadata: CredentialMetadata, ) -> Result<AuthResult>
Authenticate a user with the specified method and metadata.
Sourcepub async fn complete_mfa(
&self,
challenge: MfaChallenge,
mfa_code: &str,
) -> Result<AuthToken>
pub async fn complete_mfa( &self, challenge: MfaChallenge, mfa_code: &str, ) -> Result<AuthToken>
Complete multi-factor authentication.
Sourcepub async fn complete_mfa_by_id(
&self,
challenge_id: &str,
mfa_code: &str,
) -> Result<AuthToken>
pub async fn complete_mfa_by_id( &self, challenge_id: &str, mfa_code: &str, ) -> Result<AuthToken>
Complete MFA using a previously issued challenge ID.
Sourcepub async fn validate_token(&self, token: &AuthToken) -> Result<bool>
pub async fn validate_token(&self, token: &AuthToken) -> Result<bool>
Validate a token.
Sourcepub async fn get_user_info(&self, token: &AuthToken) -> Result<UserInfo>
pub async fn get_user_info(&self, token: &AuthToken) -> Result<UserInfo>
Get user information from a token.
Sourcepub async fn check_permission(
&self,
token: &AuthToken,
action: &str,
resource: &str,
) -> Result<bool>
pub async fn check_permission( &self, token: &AuthToken, action: &str, resource: &str, ) -> Result<bool>
Check if a token has permission to perform an action on a resource.
This method validates the token and checks if the authenticated user has the required permission for the specified action on the given resource.
§Parameters
token: The authentication token to validate and check permissions foraction: The action being requested (e.g., “read”, “write”, “delete”)resource: The resource being accessed (e.g., “documents”, “users”, “reports/123”)
§Returns
Returns true if the token is valid and the user has the required permission,
false if the token is invalid or the user lacks permission.
§Example
if auth.check_permission(token, "read", "documents").await? {
println!("User can read documents");
} else {
println!("Access denied");
}Sourcepub async fn refresh_token(&self, token: &AuthToken) -> Result<AuthToken>
pub async fn refresh_token(&self, token: &AuthToken) -> Result<AuthToken>
Refresh a token.
Sourcepub async fn revoke_token(&self, token: &AuthToken) -> Result<()>
pub async fn revoke_token(&self, token: &AuthToken) -> Result<()>
Revoke a token.
Sourcepub async fn create_api_key(
&self,
user_id: &str,
expires_in: Option<Duration>,
) -> Result<String>
pub async fn create_api_key( &self, user_id: &str, expires_in: Option<Duration>, ) -> Result<String>
Create a new API key for a user.
Sourcepub async fn validate_api_key(&self, api_key: &str) -> Result<UserInfo>
pub async fn validate_api_key(&self, api_key: &str) -> Result<UserInfo>
Validate an API key and return user information.
Sourcepub async fn revoke_api_key(&self, api_key: &str) -> Result<()>
pub async fn revoke_api_key(&self, api_key: &str) -> Result<()>
Revoke an API key.
Sourcepub async fn create_session(
&self,
user_id: &str,
expires_in: Duration,
ip_address: Option<String>,
user_agent: Option<String>,
) -> Result<String>
pub async fn create_session( &self, user_id: &str, expires_in: Duration, ip_address: Option<String>, user_agent: Option<String>, ) -> Result<String>
Create a new session.
Sourcepub async fn create_session_with_request(
&self,
req: SessionCreateRequest,
) -> Result<String>
pub async fn create_session_with_request( &self, req: SessionCreateRequest, ) -> Result<String>
Create a new session using a SessionCreateRequest for better readability.
Prefer create_session_with_request
with a SessionCreateRequest for better readability when using optional fields.
§Example
let session_id = auth.create_session_with_request(
SessionCreateRequest::new("user_123", Duration::from_secs(3600))
.ip_address("192.168.1.1")
.user_agent("MyApp/1.0")
).await?;Sourcepub async fn get_session(&self, session_id: &str) -> Result<Option<SessionData>>
pub async fn get_session(&self, session_id: &str) -> Result<Option<SessionData>>
Get session information.
Sourcepub async fn delete_session(&self, session_id: &str) -> Result<()>
pub async fn delete_session(&self, session_id: &str) -> Result<()>
Delete a session.
Sourcepub async fn list_user_tokens(&self, user_id: &str) -> Result<Vec<AuthToken>>
pub async fn list_user_tokens(&self, user_id: &str) -> Result<Vec<AuthToken>>
Get all tokens for a user.
Sourcepub async fn cleanup_expired_data(&self) -> Result<()>
pub async fn cleanup_expired_data(&self) -> Result<()>
Clean up expired data.
Sourcepub fn token_manager(&self) -> &TokenManager
pub fn token_manager(&self) -> &TokenManager
Returns a reference to the underlying TokenManager.
Useful for advanced token operations not exposed by the
TokenOperations facade.
Sourcepub async fn validate_username(&self, username: &str) -> Result<bool>
pub async fn validate_username(&self, username: &str) -> Result<bool>
Validates a username against the configured format rules.
Returns Ok(true) when the name is acceptable, or an error describing
the specific rule that was violated (length, characters, etc.).
§Errors
Returns AuthError if the username is empty, too long, or contains
forbidden characters per the active [SecurityConfig].
Sourcepub async fn validate_display_name(&self, display_name: &str) -> Result<bool>
pub async fn validate_display_name(&self, display_name: &str) -> Result<bool>
Sourcepub async fn validate_password_strength(&self, password: &str) -> Result<bool>
pub async fn validate_password_strength(&self, password: &str) -> Result<bool>
Sourcepub async fn validate_user_input(&self, input: &str) -> Result<bool>
pub async fn validate_user_input(&self, input: &str) -> Result<bool>
Validates arbitrary user input against common injection patterns.
Checks for SQL injection, XSS, and command injection markers.
Returns Ok(true) when the input is safe.
Sourcepub async fn create_auth_token(
&self,
user_id: impl Into<String>,
scopes: impl Into<Scopes>,
method_name: impl Into<String>,
lifetime: Option<Duration>,
) -> Result<AuthToken>
pub async fn create_auth_token( &self, user_id: impl Into<String>, scopes: impl Into<Scopes>, method_name: impl Into<String>, lifetime: Option<Duration>, ) -> Result<AuthToken>
Creates an authentication token directly.
This is a low-level API intended for testing, migration tools, and
administrative tasks. In production, tokens should be created through
authenticate instead.
§Parameters
user_id— the subject the token is issued to.scopes— OAuth-style scopes (acceptsVec<String>,Scopes, or&[&str]).method_name— the auth method to record (must be registered).lifetime— override the default token TTL;Noneuses the framework-configured default.
§Errors
AuthError::AuthMethodifmethod_nameis not registered.AuthError::RateLimitif the user already holds the maximum number of active tokens.
Sourcepub async fn initiate_sms_challenge(&self, user_id: &str) -> Result<String>
pub async fn initiate_sms_challenge(&self, user_id: &str) -> Result<String>
Initiates an SMS-based MFA challenge for user_id.
Sends a one-time code via the configured SMS provider and returns a
challenge ID that must be passed to verify_sms_code.
§Errors
Returns AuthError if no phone number is registered or the SMS
provider fails to deliver.
Sourcepub async fn verify_sms_code(
&self,
challenge_id: &str,
code: &str,
) -> Result<bool>
pub async fn verify_sms_code( &self, challenge_id: &str, code: &str, ) -> Result<bool>
Verifies an SMS challenge code previously issued by
initiate_sms_challenge.
§Errors
Returns AuthError if the challenge has expired or if the code is
invalid.
Sourcepub async fn generate_totp_secret(&self, user_id: &str) -> Result<String>
pub async fn generate_totp_secret(&self, user_id: &str) -> Result<String>
Generates a new TOTP secret and stores it for user_id.
The returned string is a Base32-encoded secret suitable for importing
into authenticator apps. Pair with
generate_totp_qr_code for a scan-ready
URI.
§Errors
Returns AuthError if secret generation or storage fails.
Sourcepub async fn generate_totp_qr_code(
&self,
user_id: &str,
app_name: &str,
secret: &str,
) -> Result<String>
pub async fn generate_totp_qr_code( &self, user_id: &str, app_name: &str, secret: &str, ) -> Result<String>
Generates an otpauth:// URI suitable for rendering as a QR code.
§Parameters
user_id— identifies the user in the authenticator label.app_name— the issuer name shown in the authenticator app.secret— the Base32 TOTP secret fromgenerate_totp_secret.
Sourcepub async fn generate_totp_code(&self, secret: &str) -> Result<String>
pub async fn generate_totp_code(&self, secret: &str) -> Result<String>
Generates the current TOTP code for the given Base32 secret.
Primarily useful for testing; in production the user generates the code on their device.
Sourcepub async fn generate_totp_code_for_window(
&self,
secret: &str,
time_window: Option<u64>,
) -> Result<String>
pub async fn generate_totp_code_for_window( &self, secret: &str, time_window: Option<u64>, ) -> Result<String>
Generates a TOTP code for the given secret and optional time window.
When time_window is None, the current 30-second window is used.
Sourcepub async fn check_ip_rate_limit(&self, ip: &str) -> Result<bool>
pub async fn check_ip_rate_limit(&self, ip: &str) -> Result<bool>
Checks whether the given IP address is within the configured rate limit.
Returns Ok(true) if the request is allowed, or an
AuthError::RateLimit if the caller should be throttled.
Sourcepub async fn get_security_metrics(&self) -> Result<HashMap<String, u64>>
pub async fn get_security_metrics(&self) -> Result<HashMap<String, u64>>
Return security metrics for monitoring dashboards.
Keys include active_sessions, total_tokens, failed_attempts,
successful_attempts, and expired_tokens.
Sourcepub async fn generate_backup_codes(
&self,
user_id: &str,
count: usize,
) -> Result<Vec<String>>
pub async fn generate_backup_codes( &self, user_id: &str, count: usize, ) -> Result<Vec<String>>
Generate count one-time backup codes for the given user.
Codes are persisted server-side (hashed); plaintext codes are returned to the caller for display to the user.
Sourcepub async fn grant_permission(
&self,
user_id: &str,
action: &str,
resource: &str,
) -> Result<()>
pub async fn grant_permission( &self, user_id: &str, action: &str, resource: &str, ) -> Result<()>
Sourcepub async fn initiate_email_challenge(&self, user_id: &str) -> Result<String>
pub async fn initiate_email_challenge(&self, user_id: &str) -> Result<String>
Sourcepub fn storage(&self) -> Arc<dyn AuthStorage>
pub fn storage(&self) -> Arc<dyn AuthStorage>
Returns a cloned handle to the storage backend.
Useful when you need to pass storage to another component or run direct queries outside the framework’s managed API.
Sourcepub fn config(&self) -> &AuthConfig
pub fn config(&self) -> &AuthConfig
Returns a reference to the active framework configuration.
Reset runtime authorization state back to the default roles.
Sourcepub async fn register_user(
&self,
username: &str,
email: &str,
password: &str,
) -> Result<String>
pub async fn register_user( &self, username: &str, email: &str, password: &str, ) -> Result<String>
Register a new user with username, email, and password.
The password is hashed with the configured algorithm (default: Argon2) before storage. Returns the generated user ID on success.
§Errors
Returns AuthError if:
- The username or email is already taken
- The password does not meet the configured complexity requirements
- The storage backend is unavailable
§Example
let user_id = auth.users().register("alice", "alice@example.com", "S3cur3P@ss!").await?;
println!("Created user: {user_id}");Sourcepub async fn list_users(
&self,
limit: Option<usize>,
offset: Option<usize>,
active_only: bool,
) -> Result<Vec<UserInfo>>
👎Deprecated since 0.6.0: use list_users_with_query(UserListQuery::new().limit(n).active_only()) instead
pub async fn list_users( &self, limit: Option<usize>, offset: Option<usize>, active_only: bool, ) -> Result<Vec<UserInfo>>
use list_users_with_query(UserListQuery::new().limit(n).active_only()) instead
List users from the canonical user index with optional filtering and pagination.
This method provides paginated access to the user directory with optional filtering by active status.
§Parameters
limit: Maximum number of users to return (None for no limit)offset: Number of users to skip for pagination (None for start from beginning)active_only: If true, only return active users; if false, return all users
§Returns
Returns a vector of UserInfo structs containing user details.
§Example
// Get first 10 active users
let users = auth.list_users(Some(10), None, true).await?;
println!("Found {} active users", users.len());
// Get all users (active and inactive)
let all_users = auth.list_users(None, None, false).await?;Sourcepub async fn list_users_with_query(
&self,
query: UserListQuery,
) -> Result<Vec<UserInfo>>
pub async fn list_users_with_query( &self, query: UserListQuery, ) -> Result<Vec<UserInfo>>
List users using a UserListQuery for better readability.
Prefer list_users_with_query
with a UserListQuery for better readability when using pagination or filtering.
§Example
let users = auth.list_users_with_query(
UserListQuery::new()
.limit(50)
.active_only()
).await?;Sourcepub async fn get_user_record(&self, user_id: &str) -> Result<UserInfo>
pub async fn get_user_record(&self, user_id: &str) -> Result<UserInfo>
Get user information by canonical user ID.
Sourcepub async fn update_user_roles(
&self,
user_id: &str,
roles: &[String],
) -> Result<()>
pub async fn update_user_roles( &self, user_id: &str, roles: &[String], ) -> Result<()>
Update the roles assigned to a user.
Sourcepub async fn set_user_active(&self, user_id: &str, active: bool) -> Result<()>
pub async fn set_user_active(&self, user_id: &str, active: bool) -> Result<()>
Set a user’s active / deactivated status.
Sourcepub async fn update_user_email(&self, user_id: &str, email: &str) -> Result<()>
pub async fn update_user_email(&self, user_id: &str, email: &str) -> Result<()>
Update a user’s email address.
Sourcepub async fn verify_user_password(
&self,
user_id: &str,
password: &str,
) -> Result<bool>
pub async fn verify_user_password( &self, user_id: &str, password: &str, ) -> Result<bool>
Verify a user’s password by user_id against the stored bcrypt hash.
Sourcepub async fn get_username_by_id(&self, user_id: &str) -> Result<String>
pub async fn get_username_by_id(&self, user_id: &str) -> Result<String>
Look up a user’s username by their user_id.
Sourcepub async fn username_exists(&self, username: &str) -> Result<bool>
pub async fn username_exists(&self, username: &str) -> Result<bool>
Check if a username exists.
Sourcepub async fn email_exists(&self, email: &str) -> Result<bool>
pub async fn email_exists(&self, email: &str) -> Result<bool>
Check if an email exists.
Sourcepub async fn get_user_by_username(
&self,
username: &str,
) -> Result<HashMap<String, Value>>
pub async fn get_user_by_username( &self, username: &str, ) -> Result<HashMap<String, Value>>
Get user data by username.
Sourcepub async fn update_user_password(
&self,
username: &str,
new_password: &str,
) -> Result<()>
pub async fn update_user_password( &self, username: &str, new_password: &str, ) -> Result<()>
Update user password.
Sourcepub async fn update_user_password_by_id(
&self,
user_id: &str,
new_password: &str,
) -> Result<()>
pub async fn update_user_password_by_id( &self, user_id: &str, new_password: &str, ) -> Result<()>
Update user password by canonical user ID.
Sourcepub async fn delete_user(&self, username: &str) -> Result<()>
pub async fn delete_user(&self, username: &str) -> Result<()>
Delete a user by username.
Sourcepub async fn delete_user_by_id(&self, user_id: &str) -> Result<()>
pub async fn delete_user_by_id(&self, user_id: &str) -> Result<()>
Delete a user by canonical user ID.
Sourcepub async fn coordinate_distributed_sessions(
&self,
) -> Result<SessionCoordinationStats>
pub async fn coordinate_distributed_sessions( &self, ) -> Result<SessionCoordinationStats>
Coordinate session state across distributed instances.
Sourcepub async fn synchronize_session(&self, session_id: &str) -> Result<()>
pub async fn synchronize_session(&self, session_id: &str) -> Result<()>
Synchronize a specific session with remote instances.
Sourcepub fn monitoring_manager(&self) -> Arc<MonitoringManager>
pub fn monitoring_manager(&self) -> Arc<MonitoringManager>
Returns the monitoring manager for metrics collection and health checks.
Sourcepub fn security_manager(&self) -> Option<Arc<SecurityManager>>
pub fn security_manager(&self) -> Option<Arc<SecurityManager>>
Returns the security manager for rate limiting, DoS protection, and IP blacklisting.
Sourcepub async fn get_performance_metrics(&self) -> HashMap<String, u64>
pub async fn get_performance_metrics(&self) -> HashMap<String, u64>
Return current performance metrics (token counts, latencies, etc.).
Sourcepub async fn health_check(&self) -> Result<HashMap<String, HealthCheckResult>>
pub async fn health_check(&self) -> Result<HashMap<String, HealthCheckResult>>
Run a health check on all sub-systems (storage, token engine, etc.).
Sourcepub async fn export_prometheus_metrics(&self) -> String
pub async fn export_prometheus_metrics(&self) -> String
Export all collected metrics in Prometheus text exposition format.
Sourcepub async fn create_role(&self, role: Role) -> Result<()>
pub async fn create_role(&self, role: Role) -> Result<()>
Create a new role.
Sourcepub async fn list_roles(&self) -> Vec<Role>
pub async fn list_roles(&self) -> Vec<Role>
Return all defined roles.
Sourcepub async fn add_role_permission(
&self,
role_name: &str,
permission: Permission,
) -> Result<()>
pub async fn add_role_permission( &self, role_name: &str, permission: Permission, ) -> Result<()>
Add a permission to an existing role.
Sourcepub async fn assign_role(&self, user_id: &str, role_name: &str) -> Result<()>
pub async fn assign_role(&self, user_id: &str, role_name: &str) -> Result<()>
Assign a role to a user.
Sourcepub async fn remove_role(&self, user_id: &str, role_name: &str) -> Result<()>
pub async fn remove_role(&self, user_id: &str, role_name: &str) -> Result<()>
Remove a role from a user.
Sourcepub async fn set_role_inheritance(
&self,
child_role: &str,
parent_role: &str,
) -> Result<()>
pub async fn set_role_inheritance( &self, child_role: &str, parent_role: &str, ) -> Result<()>
Set role inheritance.
Sourcepub async fn revoke_permission(
&self,
user_id: &str,
action: &str,
resource: &str,
) -> Result<()>
pub async fn revoke_permission( &self, user_id: &str, action: &str, resource: &str, ) -> Result<()>
Revoke permission from a user.
Sourcepub async fn user_has_role(
&self,
user_id: &str,
role_name: &str,
) -> Result<bool>
pub async fn user_has_role( &self, user_id: &str, role_name: &str, ) -> Result<bool>
Check if user has a role.
Sourcepub async fn list_user_roles(&self, user_id: &str) -> Result<Vec<String>>
pub async fn list_user_roles(&self, user_id: &str) -> Result<Vec<String>>
List the currently assigned runtime roles for a user.
Sourcepub async fn get_effective_permissions(
&self,
user_id: &str,
) -> Result<Vec<String>>
pub async fn get_effective_permissions( &self, user_id: &str, ) -> Result<Vec<String>>
Get effective permissions for a user.
Sourcepub async fn create_abac_policy(
&self,
name: &str,
description: &str,
) -> Result<()>
pub async fn create_abac_policy( &self, name: &str, description: &str, ) -> Result<()>
Create ABAC policy.
Sourcepub async fn map_user_attribute(
&self,
user_id: &str,
attribute: &str,
value: &str,
) -> Result<()>
pub async fn map_user_attribute( &self, user_id: &str, attribute: &str, value: &str, ) -> Result<()>
Set a user attribute value for ABAC (Attribute-Based Access Control) evaluation.
User attributes are key-value pairs associated with users that can be used in dynamic permission rules. This method stores or updates an attribute value.
§Parameters
user_id: The ID of the user to set the attribute forattribute: The name of the attribute to setvalue: The value to assign to the attribute
§Example
// Set user attributes for policy evaluation
auth.map_user_attribute("example_user", "department", "engineering").await?;
auth.map_user_attribute("example_user", "clearance_level", "confidential").await?;Sourcepub async fn get_user_attribute(
&self,
user_id: &str,
attribute: &str,
) -> Result<Option<String>>
pub async fn get_user_attribute( &self, user_id: &str, attribute: &str, ) -> Result<Option<String>>
Get a user attribute value for ABAC (Attribute-Based Access Control) evaluation.
User attributes are key-value pairs associated with users that can be used in dynamic permission rules. Common attributes include department, clearance level, location, etc.
§Parameters
user_id: The ID of the user whose attribute to retrieveattribute: The name of the attribute to retrieve
§Returns
Returns Some(value) if the attribute exists, None if it doesn’t exist.
§Example
if let Some(dept) = auth.get_user_attribute("example_user", "department").await? {
println!("User is in department: {}", dept);
}Sourcepub async fn check_dynamic_permission(
&self,
user_id: &str,
action: &str,
resource: &str,
context: HashMap<String, String>,
) -> Result<bool>
pub async fn check_dynamic_permission( &self, user_id: &str, action: &str, resource: &str, context: HashMap<String, String>, ) -> Result<bool>
Check dynamic permission with context evaluation (ABAC - Attribute-Based Access Control).
This method evaluates permissions based on user attributes, resource attributes, and environmental context rather than just role assignments. It’s more flexible than simple role-based checks but requires more complex policy rules.
§Parameters
user_id: The ID of the user requesting accessaction: The action being requested (e.g., “read”, “write”, “delete”)resource: The resource being accessed (e.g., “documents”, “users”, “reports/123”)context: Additional context key-value pairs for policy evaluation
§Returns
Returns true if the permission is granted based on the dynamic policy evaluation.
§Example
let mut context = HashMap::new();
context.insert("time_of_day".to_string(), "business_hours".to_string());
context.insert("ip_location".to_string(), "office".to_string());
if auth.check_dynamic_permission("example_user", "read", "confidential_docs", context).await? {
println!("Access granted based on dynamic policy");
}Sourcepub async fn check_dynamic_permission_with_context(
&self,
user_id: &str,
action: &str,
resource: &str,
context: PermissionContext,
) -> Result<bool>
pub async fn check_dynamic_permission_with_context( &self, user_id: &str, action: &str, resource: &str, context: PermissionContext, ) -> Result<bool>
Check dynamic permission using a structured context (preferred).
Prefer check_dynamic_permission_with_context
with a PermissionContext for better type safety and readability.
§Example
let context = PermissionContext::new()
.with_attribute("time_of_day", "business_hours")
.with_attribute("ip_location", "office");
if auth.check_dynamic_permission_with_context("example_user", "read", "confidential_docs", context).await? {
println!("Access granted based on dynamic policy");
}Sourcepub async fn create_resource(&self, resource: &str) -> Result<()>
pub async fn create_resource(&self, resource: &str) -> Result<()>
Create resource for permission management.
Sourcepub async fn delegate_permission_with_request(
&self,
req: DelegationRequest,
) -> Result<()>
pub async fn delegate_permission_with_request( &self, req: DelegationRequest, ) -> Result<()>
Delegate permission from one user to another using a DelegationRequest.
This is the preferred method for delegation as it avoids passing multiple parameters and makes the call site self-documenting.
§Example
let req = DelegationRequest::new("admin_1", "user_2", "write", "reports")
.duration(Duration::from_secs(3600));
auth.delegate_permission_with_request(req).await?;Sourcepub async fn delegate_permission(
&self,
delegator_id: &str,
delegatee_id: &str,
action: &str,
resource: &str,
duration: Duration,
) -> Result<()>
pub async fn delegate_permission( &self, delegator_id: &str, delegatee_id: &str, action: &str, resource: &str, duration: Duration, ) -> Result<()>
Delegate permission from one user to another.
Prefer delegate_permission_with_request
with a DelegationRequest for better readability when delegating permissions.
Sourcepub async fn get_active_delegations(&self, user_id: &str) -> Result<Vec<String>>
pub async fn get_active_delegations(&self, user_id: &str) -> Result<Vec<String>>
Get active delegations for a user.
Sourcepub async fn get_permission_audit_logs(
&self,
user_id: Option<&str>,
action: Option<&str>,
resource: Option<&str>,
limit: Option<usize>,
) -> Result<Vec<String>>
pub async fn get_permission_audit_logs( &self, user_id: Option<&str>, action: Option<&str>, resource: Option<&str>, limit: Option<usize>, ) -> Result<Vec<String>>
Get permission audit logs with filtering.
Sourcepub async fn get_permission_audit_logs_with_query(
&self,
query: AuditLogQuery,
) -> Result<Vec<String>>
pub async fn get_permission_audit_logs_with_query( &self, query: AuditLogQuery, ) -> Result<Vec<String>>
Get permission audit logs using an AuditLogQuery for better readability.
Prefer get_permission_audit_logs_with_query
with an AuditLogQuery for better readability when using multiple filters.
§Example
let logs = auth.get_permission_audit_logs_with_query(
AuditLogQuery::new()
.user("user_123")
.action("read")
.limit(50)
).await?;Sourcepub async fn get_permission_metrics(
&self,
) -> Result<HashMap<String, u64>, AuthError>
pub async fn get_permission_metrics( &self, ) -> Result<HashMap<String, u64>, AuthError>
Get permission metrics for monitoring.
Sourcepub async fn get_security_audit_stats(&self) -> Result<SecurityAuditStats>
pub async fn get_security_audit_stats(&self) -> Result<SecurityAuditStats>
Collect comprehensive security audit statistics.
Sourcepub async fn get_user_profile(&self, user_id: &str) -> Result<ProviderProfile>
pub async fn get_user_profile(&self, user_id: &str) -> Result<ProviderProfile>
Get user profile information
Source§impl AuthFramework
impl AuthFramework
Sourcepub fn builder() -> AuthBuilder
pub fn builder() -> AuthBuilder
Create a new builder for the authentication framework
Sourcepub fn quick_start() -> QuickStartBuilder
pub fn quick_start() -> QuickStartBuilder
Quick start builder for common setups
Sourcepub fn for_use_case(use_case: UseCasePreset) -> AuthBuilder
pub fn for_use_case(use_case: UseCasePreset) -> AuthBuilder
Create a builder for a specific use case
Sourcepub fn preset(preset: SecurityPreset) -> AuthBuilder
pub fn preset(preset: SecurityPreset) -> AuthBuilder
Create an authentication framework with preset configuration
Auto Trait Implementations§
impl Freeze for AuthFramework
impl !RefUnwindSafe for AuthFramework
impl Send for AuthFramework
impl Sync for AuthFramework
impl Unpin for AuthFramework
impl UnsafeUnpin for AuthFramework
impl !UnwindSafe for AuthFramework
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more