static_authz_plugin/domain/
client.rs1use async_trait::async_trait;
4use authz_resolver_sdk::{
5 AuthZResolverError, AuthZResolverPluginClient, EvaluationRequest, EvaluationResponse,
6};
7
8use super::service::Service;
9
10#[async_trait]
11impl AuthZResolverPluginClient for Service {
12 async fn evaluate(
13 &self,
14 request: EvaluationRequest,
15 ) -> Result<EvaluationResponse, AuthZResolverError> {
16 Ok(self.evaluate(&request))
17 }
18}
19
20#[cfg(test)]
21#[cfg_attr(coverage_nightly, coverage(off))]
22mod tests {
23 use super::*;
24 use authz_resolver_sdk::{Action, EvaluationRequestContext, Resource, Subject, TenantContext};
25 use std::collections::HashMap;
26 use uuid::Uuid;
27
28 #[tokio::test]
29 async fn plugin_trait_evaluates_successfully() {
30 let service = Service::new();
31 let plugin: &dyn AuthZResolverPluginClient = &service;
32
33 let request = EvaluationRequest {
34 subject: Subject {
35 id: Uuid::nil(),
36 subject_type: None,
37 properties: HashMap::new(),
38 },
39 action: Action {
40 name: "list".to_owned(),
41 },
42 resource: Resource {
43 resource_type: "test".to_owned(),
44 id: None,
45 properties: HashMap::new(),
46 },
47 context: EvaluationRequestContext {
48 tenant_context: Some(TenantContext {
49 root_id: Some(Uuid::parse_str("33333333-3333-3333-3333-333333333333").unwrap()),
50 ..TenantContext::default()
51 }),
52 token_scopes: vec![],
53 require_constraints: false,
54 capabilities: vec![],
55 supported_properties: vec![],
56 bearer_token: None,
57 },
58 };
59
60 let result = plugin.evaluate(request).await;
61 assert!(result.is_ok());
62 assert!(result.unwrap().decision);
63 }
64}