pub trait AuthorizationHandler: Send + Sync {
// Required method
fn handle<'a>(
&'a self,
context: &'a DefaultAuthorizationContext,
) -> Pin<Box<dyn Future<Output = AuthServiceResult<AuthorizationDecision>> + Send + 'a>>;
}Expand description
Authorization handler trait.
This trait defines the interface for handlers in the authorization chain. Each handler returns a final allow/deny decision. Operational failures remain errors and stop the chain immediately.
§Design Pattern
Implements Chain of Responsibility, allowing multiple authorization strategies (ACL, RBAC, ABAC) to be chained together.
§Thread Safety
Implementations must be Send + Sync for concurrent access.
Required Methods§
Sourcefn handle<'a>(
&'a self,
context: &'a DefaultAuthorizationContext,
) -> Pin<Box<dyn Future<Output = AuthServiceResult<AuthorizationDecision>> + Send + 'a>>
fn handle<'a>( &'a self, context: &'a DefaultAuthorizationContext, ) -> Pin<Box<dyn Future<Output = AuthServiceResult<AuthorizationDecision>> + Send + 'a>>
Handle the authorization request.
§Arguments
context- The authorization context containing subject, resource, actions, etc.
§Returns
Ok(AuthorizationDecision)- A final authorization decisionErr(AuthServiceError)- The handler could not make a decision
§Example
ⓘ
use rocketmq_auth::AuthorizationHandler;
use rocketmq_auth::DefaultAuthorizationContext;
struct MyHandler;
impl AuthorizationHandler for MyHandler {
fn handle<'a>(
&'a self,
context: &'a DefaultAuthorizationContext,
) -> Pin<Box<dyn Future<Output = AuthServiceResult<AuthorizationDecision>> + Send + 'a>> {
Box::pin(async move {
// Authorization logic here
Ok(AuthorizationDecision::Allow)
})
}
}Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".