Skip to main content

potree_auth/project/domain/
authorization.rs

1//! AuthZ trait implementations for a [`Project`].
2
3use super::Project;
4use crate::authorization::domain::resource::Resource;
5use crate::authorization::domain::resource::ResourceIdentifier;
6use crate::authorization::domain::resource::ResourceInstance;
7use crate::authorization::domain::resource::ResourceType;
8use crate::common::domain::Group;
9use crate::common::domain::resource_type;
10use crate::user::domain::EmailAddress;
11
12impl Resource for Project {
13    fn resource_type(&self) -> crate::authorization::domain::resource::ResourceType {
14        ResourceType::new(resource_type::PROJECT.to_owned())
15    }
16}
17
18impl ResourceInstance for Project {
19    fn resource_identifier(&self) -> crate::authorization::domain::resource::ResourceIdentifier {
20        ResourceIdentifier::new(self.id.to_string())
21    }
22
23    fn groups(&self) -> Option<Vec<Group>> {
24        Some(self.groups.clone())
25    }
26
27    fn user_emails(&self) -> Option<Vec<EmailAddress>> {
28        None
29    }
30}
31
32/// Represents a project type for type-level (rather than instance-level) authZ.
33#[derive(Debug)]
34pub struct ProjectTypeResource;
35
36impl Resource for ProjectTypeResource {
37    fn resource_type(&self) -> crate::authorization::domain::resource::ResourceType {
38        ResourceType::new(resource_type::PROJECT.to_owned())
39    }
40}