actix_web_grants/permissions/attache.rs
1use crate::permissions::AuthDetails;
2use actix_web::dev::ServiceRequest;
3use actix_web::HttpMessage;
4
5/// Allows you to transfer permissions to [`actix-web-grants`] from your custom middleware.
6///
7/// The default implementation is provided for the [`ServiceRequest`]
8///
9/// # Example
10///
11/// ```
12/// use actix_web_grants::permissions::AttachPermissions;
13/// use actix_web::dev::ServiceRequest;
14///
15/// // You can use you own type/enum instead of `String`
16/// fn attach(req: &ServiceRequest, permissions: Vec<String>) {
17/// req.attach(permissions);
18/// }
19///
20/// ```
21///
22/// [`actix-web-grants`]: crate
23/// [`ServiceRequest`]: actix_web::dev::ServiceRequest
24pub trait AttachPermissions<Type> {
25 fn attach(&self, permissions: Vec<Type>);
26}
27
28impl<Type: PartialEq + Clone + 'static> AttachPermissions<Type> for ServiceRequest {
29 fn attach(&self, permissions: Vec<Type>) {
30 self.extensions_mut().insert(AuthDetails::new(permissions));
31 }
32}