From 4095a8804c17c3ec12706f00d3694f564afc0b95 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 4 Oct 2023 12:48:16 +0200 Subject: basic management of user permissions --- common/src/user.rs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'common/src') diff --git a/common/src/user.rs b/common/src/user.rs index 543162c..8640dc2 100644 --- a/common/src/user.rs +++ b/common/src/user.rs @@ -1,5 +1,5 @@ use serde::{Deserialize, Serialize}; -use std::collections::HashMap; +use std::{collections::HashMap, fmt::Display}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct User { @@ -13,18 +13,37 @@ pub struct User { #[derive(Debug, Clone, Serialize, Deserialize, Default)] pub struct PermissionSet(pub HashMap); -#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] #[serde(rename_all = "snake_case")] pub enum UserPermission { + Admin, OriginalStream, Transcode, ManageUsers, GenerateInvite, + AccessNode(String), } impl UserPermission { + pub const ALL_ENUMERABLE: &'static [UserPermission] = { + use UserPermission::*; + &[Admin, OriginalStream, Transcode] + }; pub fn default_value(&self) -> bool { use UserPermission::*; matches!(self, Transcode) } } + +impl Display for UserPermission { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(&match self { + UserPermission::Admin => format!("administrative rights"), + UserPermission::OriginalStream => format!("download of the original media"), + UserPermission::Transcode => format!("transcoding"), + UserPermission::ManageUsers => format!("management of all users"), + UserPermission::GenerateInvite => format!("inviting new users"), + UserPermission::AccessNode(s) => format!("access to library node {s:?}"), + }) + } +} -- cgit v1.2.3-70-g09d2