25 lines
671 B
Rust
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()
|
|
}
|
|
}
|