potree_auth/user/domain/
mod.rs1use serde::Deserialize;
4use serde::Serialize;
5
6use crate::common::domain::Group;
7use crate::common::domain::utils::new_type::new_type;
8
9#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
11#[cfg_attr(any(test, feature = "fake"), derive(fake::Dummy))]
12pub struct User {
13 pub id: UserId,
14 pub name: UserName,
15 pub email: EmailAddress,
16
17 pub groups: Vec<Group>,
20}
21
22impl User {
23 pub fn is_admin(&self) -> bool {
25 self.groups.contains(&Group::new("admin"))
26 }
27}
28
29#[cfg(any(test, feature = "fake"))]
30impl User {
31 pub fn dummy_admin() -> Self {
32 use fake::Fake;
33 use fake::Faker;
34
35 use crate::common::domain::Group;
36
37 Self {
38 groups: [Group::new("admin"), Faker.fake()].into(),
39 ..Faker.fake()
40 }
41 }
42}
43
44new_type![
45 #[derive(Deserialize, Serialize)]
47 UserName(
48 #[cfg_attr(any(test, feature = "fake"), dummy(faker = "fake::faker::name::en::Name()"))]
49 String
50 )
51];
52
53new_type![
54 #[derive(Deserialize, Serialize)]
58 EmailAddress(
59 #[cfg_attr(any(test, feature = "fake"), dummy(faker = "fake::faker::internet::en::FreeEmail()"))]
60 String
61 )
62];
63
64new_type![
65 #[derive(Deserialize, Serialize)]
67 UserId(String)
68];
69
70#[cfg(test)]
71mod user_tests {
72 use fake::Fake;
73 use fake::Faker;
74
75 use super::*;
76
77 mod is_admin {
78 use super::*;
79
80 #[test]
81 fn should_return_true_if_user_is_part_of_admin_group() {
82 let user = User::dummy_admin();
84
85 let res = user.is_admin();
87
88 assert!(res);
90 }
91
92 #[test]
93 fn should_return_false_if_user_is_not_part_of_admin_group() {
94 let user = User { ..Faker.fake() };
96
97 let res = user.is_admin();
99
100 assert!(!res);
102 }
103 }
104}