piam_types/
principal.rs

1use uuid::Uuid;
2
3use crate::type_alias::HttpRequest;
4
5#[derive(Debug, Default, Eq, Hash, PartialEq)]
6pub struct User {
7    pub id: Uuid,
8    pub name: String,
9    // sample: AKPSTEAMXXX
10    pub access_key: String,
11    pub secret_key: String,
12    pub kind: UserKind,
13}
14
15impl User {}
16
17pub trait UserExt {
18    fn user(&self) -> Option<User>;
19}
20
21impl UserExt for HttpRequest {
22    fn user(&self) -> Option<User> {
23        // TODO: find by access_key
24        Some(User {
25            // IO dependent
26            id: Default::default(),
27            // parse AK
28            name: "".to_string(),
29            // source
30            access_key: "".to_string(),
31            // IO dependent
32            secret_key: "".to_string(),
33            // parse AK
34            kind: UserKind::Person,
35        })
36    }
37}
38
39#[derive(Debug, Default, Eq, Hash, PartialEq)]
40pub enum UserKind {
41    #[default]
42    // SVCS
43    Service,
44    // PERS
45    Person,
46    // TEAM
47    Team,
48    // COMP
49    Company,
50    // CUST
51    Customer,
52}
53
54#[derive(Debug, Default, Eq, Hash, PartialEq)]
55pub struct Group {
56    pub id: Uuid,
57    pub name: String,
58    pub users: Vec<User>,
59}
60
61#[derive(Debug, Default, Eq, Hash, PartialEq)]
62pub struct Role {
63    pub name: String,
64}