mirror of
https://github.com/lldap/lldap.git
synced 2026-07-11 09:30:54 +00:00
59 lines
1.5 KiB
Rust
59 lines
1.5 KiB
Rust
use crate::types::UserId;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Clone, Copy, PartialEq, Eq, Debug, Serialize, Deserialize)]
|
|
pub enum Permission {
|
|
Admin,
|
|
PasswordManager,
|
|
Readonly,
|
|
Regular,
|
|
}
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct ValidationResults {
|
|
pub user: UserId,
|
|
pub permission: Permission,
|
|
}
|
|
|
|
impl ValidationResults {
|
|
#[cfg(feature = "test")]
|
|
pub fn admin() -> Self {
|
|
Self {
|
|
user: UserId::new("admin"),
|
|
permission: Permission::Admin,
|
|
}
|
|
}
|
|
|
|
#[must_use]
|
|
pub fn is_admin(&self) -> bool {
|
|
self.permission == Permission::Admin
|
|
}
|
|
|
|
#[must_use]
|
|
pub fn can_read_all(&self) -> bool {
|
|
self.permission == Permission::Admin
|
|
|| self.permission == Permission::Readonly
|
|
|| self.permission == Permission::PasswordManager
|
|
}
|
|
|
|
#[must_use]
|
|
pub fn can_read(&self, user: &UserId) -> bool {
|
|
self.permission == Permission::Admin
|
|
|| self.permission == Permission::PasswordManager
|
|
|| self.permission == Permission::Readonly
|
|
|| &self.user == user
|
|
}
|
|
|
|
#[must_use]
|
|
pub fn can_change_password(&self, user: &UserId, user_is_admin: bool) -> bool {
|
|
self.permission == Permission::Admin
|
|
|| (self.permission == Permission::PasswordManager && !user_is_admin)
|
|
|| &self.user == user
|
|
}
|
|
|
|
#[must_use]
|
|
pub fn can_write(&self, user: &UserId) -> bool {
|
|
self.permission == Permission::Admin || &self.user == user
|
|
}
|
|
}
|