pub struct AuthorizationHook { /* private fields */ }Available on crate feature
enterprise only.Expand description
Implementations§
Source§impl AuthorizationHook
impl AuthorizationHook
Sourcepub fn with_engine(self, engine: impl AuthorizationEngine + 'static) -> Self
pub fn with_engine(self, engine: impl AuthorizationEngine + 'static) -> Self
Adds an authorization engine to the chain.
§Examples
use http_handle::enterprise::{AuthorizationContext, AuthorizationDecision, AuthorizationEngine, AuthorizationHook};
struct Allow;
impl AuthorizationEngine for Allow {
fn evaluate(&self, _context: &AuthorizationContext) -> AuthorizationDecision { AuthorizationDecision::Allow }
}
let _h = AuthorizationHook::new().with_engine(Allow);
assert_eq!(1, 1);§Panics
This function does not panic.
Sourcepub fn evaluate(&self, context: &AuthorizationContext) -> AuthorizationDecision
pub fn evaluate(&self, context: &AuthorizationContext) -> AuthorizationDecision
Evaluates all engines in-order.
§Examples
use http_handle::enterprise::{AuthorizationContext, AuthorizationDecision, AuthorizationEngine, AuthorizationHook};
struct Allow;
impl AuthorizationEngine for Allow {
fn evaluate(&self, _context: &AuthorizationContext) -> AuthorizationDecision { AuthorizationDecision::Allow }
}
let h = AuthorizationHook::new().with_engine(Allow);
let d = h.evaluate(&AuthorizationContext::default());
assert!(matches!(d, AuthorizationDecision::Allow));§Panics
This function does not panic.
Sourcepub fn evaluate_http_request(
&self,
request: &Request,
subject: impl Into<String>,
attributes: HashMap<String, String>,
) -> AuthorizationDecision
pub fn evaluate_http_request( &self, request: &Request, subject: impl Into<String>, attributes: HashMap<String, String>, ) -> AuthorizationDecision
Evaluates authorization from an HTTP request.
Use this helper to map request method and path into an authorization context without repeating context construction in each handler.
§Examples
use http_handle::enterprise::{AuthorizationDecision, AuthorizationHook, RbacAdapter};
use http_handle::request::Request;
use std::collections::HashMap;
let auth = AuthorizationHook::new().with_engine(
RbacAdapter::default()
.grant_role("service-a", "reader")
.grant_permission("reader", "/metrics", "GET"),
);
let request = Request {
method: "GET".to_string(),
path: "/metrics".to_string(),
version: "HTTP/1.1".to_string(),
headers: HashMap::new(),
};
let decision = auth.evaluate_http_request(
&request,
"service-a",
HashMap::new(),
);
assert!(matches!(decision, AuthorizationDecision::Allow));§Panics
This function does not panic.
Trait Implementations§
Source§impl Debug for AuthorizationHook
impl Debug for AuthorizationHook
Source§impl Default for AuthorizationHook
impl Default for AuthorizationHook
Source§fn default() -> AuthorizationHook
fn default() -> AuthorizationHook
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for AuthorizationHook
impl !RefUnwindSafe for AuthorizationHook
impl Send for AuthorizationHook
impl Sync for AuthorizationHook
impl Unpin for AuthorizationHook
impl UnsafeUnpin for AuthorizationHook
impl !UnwindSafe for AuthorizationHook
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more