use crate::auth::TokenSubject;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct OrgClaims {
pub org_id: String,
pub org_role: String,
}
impl OrgClaims {
pub fn new(org_id: impl Into<String>, org_role: impl Into<String>) -> Self {
Self {
org_id: org_id.into(),
org_role: org_role.into(),
}
}
}
pub fn create_org_token_subject<'a, R: ToString>(
user_id: &'a str,
org_id: &str,
role: &R,
) -> TokenSubject<'a, OrgClaims> {
TokenSubject::new(user_id).with_custom(OrgClaims::new(org_id, role.to_string()))
}
#[cfg(test)]
mod tests {
use super::*;
use crate::organizations::DefaultOrgRole;
#[test]
fn test_org_claims_serialization() {
let claims = OrgClaims::new("org_123", "admin");
let json = serde_json::to_string(&claims).unwrap();
assert!(json.contains("org_123"));
assert!(json.contains("admin"));
let parsed: OrgClaims = serde_json::from_str(&json).unwrap();
assert_eq!(parsed.org_id, "org_123");
assert_eq!(parsed.org_role, "admin");
}
#[test]
fn test_create_org_token_subject() {
let subject = create_org_token_subject("user_123", "org_456", &DefaultOrgRole::Admin);
assert_eq!(subject.user_id, "user_123");
}
}