1use serde::{Deserialize, Serialize};
2
3use crate::models::{Membership, Organization, Session, User};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct Identity {
11 pub user: User,
12 pub session: Session,
13 pub active_org: Option<Organization>,
14 pub active_membership: Option<Membership>,
15}
16
17impl Identity {
18 pub fn new(user: User, session: Session) -> Self {
19 Self {
20 user,
21 session,
22 active_org: None,
23 active_membership: None,
24 }
25 }
26
27 pub fn with_org(mut self, org: Organization, membership: Membership) -> Self {
28 self.active_org = Some(org);
29 self.active_membership = Some(membership);
30 self
31 }
32
33 pub fn has_permission(&self, permission: &str) -> bool {
34 self.active_membership
35 .as_ref()
36 .map(|m| m.role.permissions.iter().any(|p| p == permission))
37 .unwrap_or(false)
38 }
39
40 pub fn has_role(&self, role: &str) -> bool {
41 self.active_membership
42 .as_ref()
43 .map(|m| m.role.name == role)
44 .unwrap_or(false)
45 }
46}