21 lines
635 B
Rust
21 lines
635 B
Rust
use crate::auth::get_auth_user;
|
|
use crate::models::user::Role;
|
|
use async_graphql::{Context, Error, Guard, Result};
|
|
|
|
pub struct RequireRole(pub Role);
|
|
|
|
impl Guard for RequireRole {
|
|
async fn check(&self, ctx: &Context<'_>) -> Result<()> {
|
|
let user = get_auth_user(ctx).await?;
|
|
|
|
match (self.0, user.role) {
|
|
(Role::User, Role::User) | (Role::User, Role::Admin) => Ok(()),
|
|
(Role::Admin, Role::Admin) => Ok(()),
|
|
_ => Err(Error::new(format!(
|
|
"Insufficient permissions. Required: {:?}, Current: {:?}",
|
|
self.0, user.role
|
|
))),
|
|
}
|
|
}
|
|
}
|