spawn_access_control/
audit.rsuse chrono::{DateTime, Utc};
use serde::{Serialize, Deserialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ActionResult {
Success,
Failure { reason: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuditLogEntry {
pub id: String,
pub timestamp: DateTime<Utc>,
pub user_id: String,
pub resource_id: String,
pub action: String,
pub result: ActionResult,
pub details: Option<String>,
pub ip_address: Option<String>,
pub user_agent: Option<String>,
}
impl AuditLogEntry {
pub fn new(
user_id: String,
resource_id: String,
action: String,
result: ActionResult,
) -> Self {
Self {
id: uuid::Uuid::new_v4().to_string(),
timestamp: Utc::now(),
user_id,
resource_id,
action,
result,
details: None,
ip_address: None,
user_agent: None,
}
}
pub fn with_details(mut self, details: String) -> Self {
self.details = Some(details);
self
}
pub fn with_ip(mut self, ip: String) -> Self {
self.ip_address = Some(ip);
self
}
pub fn with_user_agent(mut self, user_agent: String) -> Self {
self.user_agent = Some(user_agent);
self
}
}