style: cargo fmt --all
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use std::collections::HashSet;
|
||||
use chrono::{DateTime, Utc};
|
||||
use crate::common::errors::DomainError;
|
||||
use crate::common::value_objects::{Email, PasswordHash, SystemId};
|
||||
use chrono::{DateTime, Utc};
|
||||
use std::collections::HashSet;
|
||||
|
||||
// --- Permission ---
|
||||
|
||||
@@ -36,7 +36,10 @@ pub struct Permission {
|
||||
|
||||
impl Permission {
|
||||
pub fn new(action: PermissionAction, resource_type: ResourceType) -> Self {
|
||||
Self { action, resource_type }
|
||||
Self {
|
||||
action,
|
||||
resource_type,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,18 +52,39 @@ pub fn viewer_permissions() -> HashSet<Permission> {
|
||||
|
||||
pub fn contributor_permissions() -> HashSet<Permission> {
|
||||
let mut perms = viewer_permissions();
|
||||
perms.insert(Permission::new(PermissionAction::WriteMetadata, ResourceType::Global));
|
||||
perms.insert(Permission::new(
|
||||
PermissionAction::WriteMetadata,
|
||||
ResourceType::Global,
|
||||
));
|
||||
perms
|
||||
}
|
||||
|
||||
pub fn admin_permissions() -> HashSet<Permission> {
|
||||
let mut perms = contributor_permissions();
|
||||
perms.insert(Permission::new(PermissionAction::DeleteAsset, ResourceType::Global));
|
||||
perms.insert(Permission::new(PermissionAction::ManageAccess, ResourceType::Global));
|
||||
perms.insert(Permission::new(PermissionAction::ManageUsers, ResourceType::Global));
|
||||
perms.insert(Permission::new(PermissionAction::ManageSystem, ResourceType::Global));
|
||||
perms.insert(Permission::new(PermissionAction::ReadLocation, ResourceType::Global));
|
||||
perms.insert(Permission::new(PermissionAction::ReadPerson, ResourceType::Global));
|
||||
perms.insert(Permission::new(
|
||||
PermissionAction::DeleteAsset,
|
||||
ResourceType::Global,
|
||||
));
|
||||
perms.insert(Permission::new(
|
||||
PermissionAction::ManageAccess,
|
||||
ResourceType::Global,
|
||||
));
|
||||
perms.insert(Permission::new(
|
||||
PermissionAction::ManageUsers,
|
||||
ResourceType::Global,
|
||||
));
|
||||
perms.insert(Permission::new(
|
||||
PermissionAction::ManageSystem,
|
||||
ResourceType::Global,
|
||||
));
|
||||
perms.insert(Permission::new(
|
||||
PermissionAction::ReadLocation,
|
||||
ResourceType::Global,
|
||||
));
|
||||
perms.insert(Permission::new(
|
||||
PermissionAction::ReadPerson,
|
||||
ResourceType::Global,
|
||||
));
|
||||
perms
|
||||
}
|
||||
|
||||
@@ -75,7 +99,11 @@ pub struct Role {
|
||||
}
|
||||
|
||||
impl Role {
|
||||
pub fn new(name: impl Into<String>, permissions: HashSet<Permission>, is_system_default: bool) -> Self {
|
||||
pub fn new(
|
||||
name: impl Into<String>,
|
||||
permissions: HashSet<Permission>,
|
||||
is_system_default: bool,
|
||||
) -> Self {
|
||||
Self {
|
||||
role_id: SystemId::new(),
|
||||
name: name.into(),
|
||||
@@ -85,7 +113,8 @@ impl Role {
|
||||
}
|
||||
|
||||
pub fn has_permission(&self, action: PermissionAction, resource_type: ResourceType) -> bool {
|
||||
self.permissions.contains(&Permission::new(action, resource_type))
|
||||
self.permissions
|
||||
.contains(&Permission::new(action, resource_type))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,7 +165,9 @@ impl Group {
|
||||
|
||||
pub fn add_member(&mut self, user_id: SystemId) -> Result<(), DomainError> {
|
||||
if self.members.contains(&user_id) {
|
||||
return Err(DomainError::Conflict(format!("User {user_id} is already a member")));
|
||||
return Err(DomainError::Conflict(format!(
|
||||
"User {user_id} is already a member"
|
||||
)));
|
||||
}
|
||||
self.members.insert(user_id);
|
||||
Ok(())
|
||||
@@ -144,10 +175,14 @@ impl Group {
|
||||
|
||||
pub fn remove_member(&mut self, user_id: SystemId) -> Result<(), DomainError> {
|
||||
if user_id == self.owner_user_id {
|
||||
return Err(DomainError::Validation("Cannot remove the group owner".to_string()));
|
||||
return Err(DomainError::Validation(
|
||||
"Cannot remove the group owner".to_string(),
|
||||
));
|
||||
}
|
||||
if !self.members.remove(&user_id) {
|
||||
return Err(DomainError::NotFound(format!("User {user_id} is not a member")));
|
||||
return Err(DomainError::NotFound(format!(
|
||||
"User {user_id} is not a member"
|
||||
)));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use async_trait::async_trait;
|
||||
use super::entities::{Group, Role, User};
|
||||
use crate::common::errors::DomainError;
|
||||
use crate::common::value_objects::{Email, PasswordHash, SystemId};
|
||||
use super::entities::{Group, Role, User};
|
||||
use async_trait::async_trait;
|
||||
|
||||
// --- UserRepository ---
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use std::collections::HashSet;
|
||||
use super::entities::{Permission, PermissionAction, ResourceType, Role};
|
||||
use std::collections::HashSet;
|
||||
|
||||
pub struct PermissionChecker;
|
||||
|
||||
@@ -16,6 +16,9 @@ impl PermissionChecker {
|
||||
}
|
||||
|
||||
pub fn effective_permissions(roles: &[Role]) -> HashSet<Permission> {
|
||||
roles.iter().flat_map(|r| r.permissions.iter().copied()).collect()
|
||||
roles
|
||||
.iter()
|
||||
.flat_map(|r| r.permissions.iter().copied())
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user