use crate::ids::{PrincipalId, TenantId};
use crate::permission::Permission;
use crate::scope::ScopePath;
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AuthSubject {
pub tenant: TenantId,
pub principal: PrincipalId,
}
impl AuthSubject {
pub fn new(tenant: TenantId, principal: PrincipalId) -> Self {
Self { tenant, principal }
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScopeQuery {
pub subject: AuthSubject,
pub permission: Permission,
}
#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TenantAccessRequest {
pub subject: AuthSubject,
pub permission: Permission,
}
#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScopedAccessRequest {
pub subject: AuthSubject,
pub permission: Permission,
pub target: ScopePath,
}