diff --git a/src/middlewares/auth_middleware.rs b/src/middlewares/auth_middleware.rs index 62aac5b..0976a3d 100644 --- a/src/middlewares/auth_middleware.rs +++ b/src/middlewares/auth_middleware.rs @@ -7,6 +7,7 @@ use std::rc::Rc; use actix_identity::RequestIdentity; use actix_web::{dev::{forward_ready, Service, ServiceRequest, ServiceResponse, Transform}, Error, HttpResponse}; use actix_web::body::EitherBody; +use askama::Template; use crate::constants::{ADMIN_ROUTES, AUTHENTICATED_ROUTES, LOGIN_ROUTE}; use crate::controllers::base_controller::redirect_user; @@ -55,6 +56,10 @@ impl SessionStatus { } } +#[derive(Template)] +#[template(path = "access_denied.html")] +struct AccessDeniedTemplate {} + pub struct AuthInnerMiddleware { service: Rc, } @@ -99,7 +104,12 @@ impl Service for AuthInnerMiddleware .map_into_right_body()); } - // TODO : restrict access to admin pages + // Restrict access to admin pages + if !identity.is_admin() && req.path().starts_with(ADMIN_ROUTES) { + return Ok(req.into_response(HttpResponse::Unauthorized() + .body(AccessDeniedTemplate {}.render().unwrap())) + .map_into_right_body()); + } service .call(req) diff --git a/templates/access_denied.html b/templates/access_denied.html new file mode 100644 index 0000000..550d14b --- /dev/null +++ b/templates/access_denied.html @@ -0,0 +1,12 @@ + + + + + Access denied + + + + +

You are not allowed to access this resource.

+ + \ No newline at end of file