use super::{PlatformPrincipalStatus, PlatformRoleAssignment, PlatformRoleId, PlatformSubject};
use crate::{Permission, SourceError};
use async_trait::async_trait;
#[async_trait]
pub trait PlatformAuthorizationSource: Send + Sync {
async fn platform_principal_status(
&self,
subject: &PlatformSubject,
) -> std::result::Result<PlatformPrincipalStatus, SourceError>;
async fn platform_role_assignments(
&self,
subject: &PlatformSubject,
) -> std::result::Result<Vec<PlatformRoleAssignment>, SourceError>;
async fn platform_role_permissions(
&self,
role: &PlatformRoleId,
) -> std::result::Result<Vec<Permission>, SourceError>;
async fn platform_parent_roles(
&self,
role: &PlatformRoleId,
) -> std::result::Result<Vec<PlatformRoleId>, SourceError>;
}