61 lines
1.9 KiB
Rust
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
|
|
}
|