#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[non_exhaustive]
pub enum AuthzDecision {
Allow,
Deny(String),
RequiresHumanApproval(String),
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct AuthzRequest {
pub principal: String,
pub action: String,
pub resource: String,
#[serde(default)]
pub scopes: Vec<String>,
#[serde(default)]
pub attributes: serde_json::Value,
}
pub trait Decider: Send + Sync {
fn decide(&self, request: &AuthzRequest) -> AuthzDecision;
}