1use axum::{
4 extract::{Request, State},
5 middleware::Next,
6 response::Response,
7};
8
9use cloudillo_core::extract::Auth;
10
11use crate::prelude::*;
12
13pub async fn require_admin(
18 State(_app): State<App>,
19 Auth(auth_ctx): Auth,
20 req: Request,
21 next: Next,
22) -> Result<Response, Error> {
23 if !auth_ctx.roles.iter().any(|r| r.as_ref() == "SADM") {
25 tracing::warn!(
26 subject = %auth_ctx.id_tag,
27 roles = ?auth_ctx.roles,
28 "Admin permission denied - SADM role required"
29 );
30 return Err(Error::PermissionDenied);
31 }
32
33 Ok(next.run(req).await)
34}
35
36