Files
k-photos/crates/domain/src/entities/permission.rs

61 lines
1.9 KiB
Rust

use std::collections::HashSet;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
pub enum PermissionAction {
ReadAsset,
ReadMetadata,
ReadLocation,
ReadPerson,
WriteMetadata,
DeleteAsset,
ManageAccess,
ManageUsers,
ManageSystem,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
pub enum ResourceType {
Asset,
Album,
Collection,
Person,
Directory,
Global,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
pub struct Permission {
pub action: PermissionAction,
pub resource_type: ResourceType,
}
impl Permission {
pub fn new(action: PermissionAction, resource_type: ResourceType) -> Self {
Self { action, resource_type }
}
}
pub fn viewer_permissions() -> HashSet<Permission> {
HashSet::from([
Permission::new(PermissionAction::ReadAsset, ResourceType::Global),
Permission::new(PermissionAction::ReadMetadata, ResourceType::Global),
])
}
pub fn contributor_permissions() -> HashSet<Permission> {
let mut perms = viewer_permissions();
perms.insert(Permission::new(PermissionAction::WriteMetadata, ResourceType::Global));
perms
}
pub fn admin_permissions() -> HashSet<Permission> {
let mut perms = contributor_permissions();
perms.insert(Permission::new(PermissionAction::DeleteAsset, ResourceType::Global));
perms.insert(Permission::new(PermissionAction::ManageAccess, ResourceType::Global));
perms.insert(Permission::new(PermissionAction::ManageUsers, ResourceType::Global));
perms.insert(Permission::new(PermissionAction::ManageSystem, ResourceType::Global));
perms.insert(Permission::new(PermissionAction::ReadLocation, ResourceType::Global));
perms.insert(Permission::new(PermissionAction::ReadPerson, ResourceType::Global));
perms
}