Skip to main content

AuthorizationHandler

Trait AuthorizationHandler 

Source
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§

Source

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 decision
  • Err(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".

Implementors§