use crate::error::SourceError;
use crate::ids::{RoleId, TenantId};
use crate::permission::Permission;
use crate::request::AuthSubject;
use crate::role::RoleAssignment;
use async_trait::async_trait;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum TenantStatus {
Active,
Inactive,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum MembershipStatus {
Active,
Inactive,
}
#[async_trait]
pub trait AuthorizationSource: Send + Sync {
async fn tenant_status(
&self,
tenant: &TenantId,
) -> std::result::Result<TenantStatus, SourceError>;
async fn membership_status(
&self,
subject: &AuthSubject,
) -> std::result::Result<MembershipStatus, SourceError>;
async fn role_assignments(
&self,
subject: &AuthSubject,
) -> std::result::Result<Vec<RoleAssignment>, SourceError>;
async fn role_permissions(
&self,
tenant: &TenantId,
role: &RoleId,
) -> std::result::Result<Vec<Permission>, SourceError>;
async fn parent_roles(
&self,
tenant: &TenantId,
role: &RoleId,
) -> std::result::Result<Vec<RoleId>, SourceError>;
}