Files
k-photos/crates/domain/src/identity/services.rs

25 lines
671 B
Rust

use super::entities::{Permission, PermissionAction, ResourceType, Role};
use std::collections::HashSet;
pub struct PermissionChecker;
impl PermissionChecker {
pub fn has_permission(
roles: &[Role],
action: PermissionAction,
resource_type: ResourceType,
) -> bool {
roles.iter().any(|role| {
role.has_permission(action, resource_type)
|| role.has_permission(action, ResourceType::Global)
})
}
pub fn effective_permissions(roles: &[Role]) -> HashSet<Permission> {
roles
.iter()
.flat_map(|r| r.permissions.iter().copied())
.collect()
}
}