Skip to main content

made_core/entities/
authorization_policy_event.rs

1use serde::{Deserialize, Serialize};
2use time::OffsetDateTime;
3
4use crate::value_objects::{
5    AuthenticatedPrincipal, AuthorizationDecision, AuthorizationGrant, AuthorizationPolicyId,
6    AuthorizationRevocation, SeparationRule,
7};
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
10#[serde(rename_all = "snake_case", tag = "type")]
11pub enum AuthorizationPolicyEvent {
12    Opened {
13        policy_id: AuthorizationPolicyId,
14        owner: AuthenticatedPrincipal,
15        separation_rules: Vec<SeparationRule>,
16        #[serde(with = "time::serde::rfc3339")]
17        opened_at: OffsetDateTime,
18    },
19    GrantIssued {
20        policy_id: AuthorizationPolicyId,
21        grant: AuthorizationGrant,
22        #[serde(with = "time::serde::rfc3339")]
23        issued_at: OffsetDateTime,
24    },
25    GrantRevoked {
26        policy_id: AuthorizationPolicyId,
27        revocation: AuthorizationRevocation,
28    },
29    DecisionRecorded {
30        policy_id: AuthorizationPolicyId,
31        decision: AuthorizationDecision,
32    },
33}
34
35impl AuthorizationPolicyEvent {
36    #[must_use]
37    pub const fn policy_id(&self) -> &AuthorizationPolicyId {
38        match self {
39            Self::Opened { policy_id, .. }
40            | Self::GrantIssued { policy_id, .. }
41            | Self::GrantRevoked { policy_id, .. }
42            | Self::DecisionRecorded { policy_id, .. } => policy_id,
43        }
44    }
45}