Skip to content
Clone
eba4fd1
41 lines 880 B Rust
use uuid::Uuid;
use crate::errors::AdminError;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AdminRole {
SuperAdmin,
Operator,
Viewer,
}
#[derive(Debug, Clone)]
pub struct AdminActor {
pub id: Uuid,
pub username: String,
pub display_name: String,
pub role: AdminRole,
pub must_change_password: bool,
}
impl AdminActor {
pub fn level(role: AdminRole) -> u8 {
match role {
AdminRole::SuperAdmin => 3,
AdminRole::Operator => 2,
AdminRole::Viewer => 1,
}
}
pub fn is_super(&self) -> bool {
matches!(self.role, AdminRole::SuperAdmin)
}
pub fn require(&self, minimum: AdminRole) -> Result<(), AdminError> {
if Self::level(self.role) >= Self::level(minimum) {
Ok(())
} else {
Err(AdminError::Forbidden)
}
}
}