alibi_plugins/organization/hooks/
member.rs1use crate::organization::OrganizationMemberCreatePatch;
2use crate::organization::types::OrganizationMemberRemovalSnapshot;
3use crate::organization::types::OrganizationResponse;
4use alibi_core::AuthResult;
5use alibi_core::Member;
6use alibi_core::wire::UserView;
7use async_trait::async_trait;
8
9#[derive(Debug, Clone)]
11pub struct OrganizationMemberAdditionDraft {
12 pub user_id: String,
13 pub organization_id: String,
14 pub role: String,
15 pub team_id: Option<String>,
16}
17
18#[derive(Debug, Clone)]
21pub struct OrganizationMemberAdditionContext {
22 pub member: OrganizationMemberAdditionDraft,
23 pub user: UserView,
24 pub organization: OrganizationResponse,
25}
26
27#[derive(Debug, Clone)]
29pub struct OrganizationMemberAddedContext {
30 pub member: Member,
31 pub user: UserView,
32 pub organization: OrganizationResponse,
33}
34
35#[async_trait]
42pub trait OrganizationMemberAdditionHooks: std::fmt::Debug + Send + Sync {
43 async fn before_add_member(
44 &self,
45 _context: &OrganizationMemberAdditionContext,
46 ) -> AuthResult<Option<OrganizationMemberCreatePatch>> {
47 Ok(None)
48 }
49
50 async fn after_add_member(&self, _context: &OrganizationMemberAddedContext) -> AuthResult<()> {
51 Ok(())
52 }
53}
54
55#[derive(Debug, Clone)]
60pub struct OrganizationMemberRemovalContext {
61 pub member: OrganizationMemberRemovalSnapshot,
62 pub user: UserView,
63 pub organization: OrganizationResponse,
64}
65
66#[async_trait]
73pub trait OrganizationMemberRemovalHooks: std::fmt::Debug + Send + Sync {
74 async fn before_remove(&self, _context: &OrganizationMemberRemovalContext) -> AuthResult<()> {
75 Ok(())
76 }
77 async fn after_remove(&self, _context: &OrganizationMemberRemovalContext) -> AuthResult<()> {
78 Ok(())
79 }
80}
81
82#[derive(Debug, Clone)]
85pub struct OrganizationMemberRoleContext {
86 pub member: Member,
87 pub new_role: String,
88 pub user: UserView,
89 pub organization: OrganizationResponse,
90}
91
92#[derive(Debug, Clone)]
94pub struct OrganizationMemberRoleUpdatedContext {
95 pub member: Member,
96 pub previous_role: String,
97 pub user: UserView,
98 pub organization: OrganizationResponse,
99}
100
101#[derive(Debug, Clone, Default)]
104pub struct OrganizationMemberRolePatch {
105 pub role: Option<String>,
106}
107
108#[async_trait]
113pub trait OrganizationMemberRoleHooks: std::fmt::Debug + Send + Sync {
114 async fn before_update(
115 &self,
116 _context: &OrganizationMemberRoleContext,
117 ) -> AuthResult<Option<OrganizationMemberRolePatch>> {
118 Ok(None)
119 }
120 async fn after_update(
121 &self,
122 _context: &OrganizationMemberRoleUpdatedContext,
123 ) -> AuthResult<()> {
124 Ok(())
125 }
126}