1use crate::error::AuthResult;
2use crate::types::{Token, UserContext};
3
4#[async_trait::async_trait]
7pub trait Authn: Authorizer + Authenticator + Session + Send + Sync {}
8
9pub trait ClientAccess {
12 type Client;
13
14 fn client(&self) -> Self::Client;
20}
21
22#[async_trait::async_trait]
23pub trait Authorizer: Send + Sync {
24 async fn authorize(&self, user: &UserContext, action: &str) -> AuthResult<()>;
25}
26
27#[async_trait::async_trait]
28pub trait Authenticator: Send + Sync {
29 async fn authenticate(&self, token: &Token) -> AuthResult<UserContext>;
30}
31
32#[async_trait::async_trait]
33pub trait Session: Send + Sync {
34 async fn validate(&self, token: &Token) -> AuthResult<UserContext>;
35}