use uuid::Uuid; use crate::models::{Album, AlbumPermission, Media, Role, User}; pub trait Ownable { fn owner_id(&self) -> Uuid; } impl Ownable for Media { fn owner_id(&self) -> Uuid { self.owner_id } } impl Ownable for Album { fn owner_id(&self) -> Uuid { self.owner_id } } pub fn is_admin(user: &User) -> bool { user.role == Role::Admin } pub fn is_owner(user_id: Uuid, entity: &impl Ownable) -> bool { user_id == entity.owner_id() } pub fn can_view_album( user_id: Uuid, album: &Album, share_permission: Option, ) -> bool { is_owner(user_id, album) || share_permission.is_some() } pub fn can_contribute_to_album( user_id: Uuid, album: &Album, share_permission: Option, ) -> bool { is_owner(user_id, album) || share_permission == Some(AlbumPermission::Contribute) }