made_core/entities/
authorization_policy_event.rs1use 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}