use rocketmq_auth::authorization::context::default_authorization_context::DefaultAuthorizationContext;
use rocketmq_auth::authorization::evaluator::AuthorizationEvaluator;
use rocketmq_auth::authorization::model::resource::Resource;
use rocketmq_auth::authorization::strategy::stateless_authorization_strategy::StatelessAuthorizationStrategy;
use rocketmq_auth::config::AuthConfig;
use rocketmq_common::common::action::Action;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = AuthConfig::default();
let strategy = StatelessAuthorizationStrategy::new(config, None)?;
let evaluator = AuthorizationEvaluator::new(strategy);
let mut contexts = Vec::new();
let mut context1 = DefaultAuthorizationContext::default();
context1.set_resource(Resource::of_topic("test-topic"));
context1.set_actions(vec![Action::Pub]);
context1.set_source_ip("192.168.1.100");
context1.set_rpc_code("10");
contexts.push(context1);
let mut context2 = DefaultAuthorizationContext::default();
context2.set_resource(Resource::of_group("test-group".to_string()));
context2.set_actions(vec![Action::Sub]);
context2.set_source_ip("192.168.1.100");
context2.set_rpc_code("11");
contexts.push(context2);
match evaluator.evaluate(&contexts) {
Ok(()) => println!("✓ Authorization successful for all contexts"),
Err(e) => println!("✗ Authorization failed: {}", e),
}
let empty_contexts: Vec<DefaultAuthorizationContext> = vec![];
assert!(evaluator.evaluate(&empty_contexts).is_ok());
println!("✓ Empty contexts evaluation succeeded (fast path)");
Ok(())
}