domain: add Identity & Access entities (User, Role, Permission, Group)
This commit is contained in:
60
crates/domain/src/entities/permission.rs
Normal file
60
crates/domain/src/entities/permission.rs
Normal file
@@ -0,0 +1,60 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user