use security_core::identity::AuthenticatedIdentity;
use crate::subject::Subject;
pub trait SubjectResolver {
fn resolve(identity: &AuthenticatedIdentity) -> Subject;
}
pub struct DefaultSubjectResolver;
impl SubjectResolver for DefaultSubjectResolver {
fn resolve(identity: &AuthenticatedIdentity) -> Subject {
Subject {
actor_id: identity.actor_id.to_string(),
tenant_id: identity.tenant_id.as_ref().map(|t| t.to_string()),
roles: identity.roles.iter().cloned().collect(),
attributes: identity
.attributes
.iter()
.map(|(k, v)| (k.clone(), v.clone()))
.collect(),
}
}
}