Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion crates/core/src/access/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ pub use identity::{
Authentication, AuthenticationError, IdentityContext, ObjectId, ObjectIdentity, ObjectKind,
SubjectIdentity, TargetNamespace,
};
pub use permissions::{Action, PermissionDenied, PermissionManager, PermissionResult, Permissions};
pub use permissions::{Action, PermissionDenied, PermissionResult, Permissions};
pub use policies::{PolicyDecision, PolicyLimit};
17 changes: 12 additions & 5 deletions crates/core/src/access/permissions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,20 +44,27 @@ pub enum PermissionDenied {

pub type PermissionResult = Result<(), PermissionDenied>;

/// Checks if a subject can perform an action on an object
/// Unified permissions interface (check + grant/revoke/store)
#[async_trait]
pub trait Permissions<C: IdentityContext>: Send + Sync {
/// Check if a subject may perform an action on an object
async fn check(
&self,
subject: &SubjectIdentity<C>,
action: Action,
object: &ObjectIdentity,
) -> PermissionResult;
}

/// Manages permission grants and revocations
#[async_trait]
pub trait PermissionManager<C: IdentityContext>: Permissions<C> {
/// Convenience wrapper around `check`
async fn require(
&self,
subject: &SubjectIdentity<C>,
action: Action,
object: &ObjectIdentity,
) -> PermissionResult {
self.check(subject, action, object).await
}

/// Grant a permission to a subject
async fn grant(
&self,
Expand Down
73 changes: 0 additions & 73 deletions crates/daemon/src/helpers/admin.rs

This file was deleted.

1 change: 0 additions & 1 deletion crates/daemon/src/helpers/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
//! Helper modules to reduce code complexity and duplication

pub mod admin;
pub mod errors;
pub mod services;
7 changes: 2 additions & 5 deletions crates/daemon/src/permissions.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use async_trait::async_trait;
use gate_core::StateBackend;
use gate_core::access::{
Action, IdentityContext, ObjectIdentity, PermissionDenied, PermissionManager, PermissionResult,
Permissions, SubjectIdentity,
Action, IdentityContext, ObjectIdentity, PermissionDenied, PermissionResult, Permissions,
SubjectIdentity,
};
use gate_http::services::identity::HttpIdentity;
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -110,10 +110,7 @@ impl Permissions<LocalContext> for LocalPermissionManager {
Err(e) => Err(PermissionDenied::Custom(format!("Database error: {e}"))),
}
}
}

#[async_trait]
impl PermissionManager<LocalContext> for LocalPermissionManager {
async fn grant(
&self,
granter: &SubjectIdentity<LocalContext>,
Expand Down
Loading
Loading