42 lines
883 B
Rust
42 lines
883 B
Rust
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<AlbumPermission>,
|
|
) -> bool {
|
|
is_owner(user_id, album) || share_permission.is_some()
|
|
}
|
|
|
|
pub fn can_contribute_to_album(
|
|
user_id: Uuid,
|
|
album: &Album,
|
|
share_permission: Option<AlbumPermission>,
|
|
) -> bool {
|
|
is_owner(user_id, album) || share_permission == Some(AlbumPermission::Contribute)
|
|
}
|