mmap/src/graphql/guards.rs
2025-07-28 07:26:03 +08:00

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
))),
}
}
}