aboutsummaryrefslogtreecommitdiff
path: root/common/src
diff options
context:
space:
mode:
Diffstat (limited to 'common/src')
-rw-r--r--common/src/user.rs23
1 files changed, 21 insertions, 2 deletions
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<UserPermission, bool>);
-#[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:?}"),
+ })
+ }
+}