Struct actix_web_grants::GrantsMiddleware [−][src]
pub struct GrantsMiddleware<T, Req> where
for<'a> T: PermissionsExtractor<'a, Req>, { /* fields omitted */ }
Expand description
Built-in middleware for extracting user permission.
Examples
use actix_web::dev::ServiceRequest;
use actix_web::{get, App, Error, HttpResponse, HttpServer, Responder};
use actix_web_grants::permissions::{AuthDetails, PermissionsCheck};
use actix_web_grants::{proc_macro::has_permissions, GrantsMiddleware};
fn main() {
HttpServer::new(|| {
let auth = GrantsMiddleware::with_extractor(extract);
App::new()
.wrap(auth)
.service(you_service)
});
}
// You can use both &ServiceRequest and &mut ServiceRequest
async fn extract(_req: &ServiceRequest) -> Result<Vec<String>, Error> {
// Here is a place for your code to get user permissions/grants/permissions from a request
// For example from a token or database
// Stub example
Ok(vec!["ROLE_ADMIN".to_string()])
}
// `has_permissions` is one of options to validate permissions.
#[get("/admin")]
#[has_permissions("ROLE_ADMIN")]
async fn you_service() -> impl Responder {
HttpResponse::Ok().finish()
}
Implementations
Create middleware by PermissionsExtractor
.
You can use a built-in implementation for async fn
with a suitable signature (see example below).
Or you can define your own implementation of trait.
Example of function with implementation of PermissionsExtractor
use actix_web::dev::ServiceRequest;
use actix_web::Error;
async fn extract(_req: &ServiceRequest) -> Result<Vec<String>, Error> {
// Here is a place for your code to get user permissions/grants/permissions from a request
// For example from a token or database
Ok(vec!["WRITE_ACCESS".to_string()])
}
Trait Implementations
impl<S, B, T, Req> Transform<S, ServiceRequest> for GrantsMiddleware<T, Req> where
S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error> + 'static,
for<'a> T: PermissionsExtractor<'a, Req> + 'static,
impl<S, B, T, Req> Transform<S, ServiceRequest> for GrantsMiddleware<T, Req> where
S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error> + 'static,
for<'a> T: PermissionsExtractor<'a, Req> + 'static,
type Response = ServiceResponse<B>
type Response = ServiceResponse<B>
Responses produced by the service.
type Transform = GrantsService<S, T, Req>
type Transform = GrantsService<S, T, Req>
The TransformService
value created by this factory
Creates and returns a new Transform component, asynchronously
Auto Trait Implementations
impl<T, Req> !RefUnwindSafe for GrantsMiddleware<T, Req>
impl<T, Req> !Send for GrantsMiddleware<T, Req>
impl<T, Req> !Sync for GrantsMiddleware<T, Req>
impl<T, Req> Unpin for GrantsMiddleware<T, Req> where
Req: Unpin,
impl<T, Req> UnwindSafe for GrantsMiddleware<T, Req> where
Req: UnwindSafe,
T: RefUnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
pub fn vzip(self) -> V
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more