1use crate::ids::{PrincipalId, TenantId};
2use crate::permission::Permission;
3use crate::scope::ScopePath;
4
5#[derive(Clone, Debug, Eq, PartialEq, Hash)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct AuthSubject {
9 pub tenant: TenantId,
11 pub principal: PrincipalId,
13}
14
15impl AuthSubject {
16 pub fn new(tenant: TenantId, principal: PrincipalId) -> Self {
18 Self { tenant, principal }
19 }
20}
21
22#[derive(Clone, Debug, Eq, PartialEq)]
24#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25pub struct ScopeQuery {
26 pub subject: AuthSubject,
28 pub permission: Permission,
30}
31
32#[derive(Clone, Debug, Eq, PartialEq)]
34#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
35pub struct TenantAccessRequest {
36 pub subject: AuthSubject,
38 pub permission: Permission,
40}
41
42#[derive(Clone, Debug, Eq, PartialEq)]
44#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
45pub struct ScopedAccessRequest {
46 pub subject: AuthSubject,
48 pub permission: Permission,
50 pub target: ScopePath,
52}