guardian_db/access_controller/
traits.rs1use crate::access_controller::manifest::ManifestParams;
2use crate::error::Result;
3use crate::ipfs_log::access_controller;
4use crate::ipfs_log::identity_provider::IdentityProvider;
5use async_trait::async_trait;
6
7pub type LogEntry = dyn access_controller::LogEntry;
8pub type CanAppendAdditionalContext = dyn access_controller::CanAppendAdditionalContext;
9
10#[async_trait]
12pub trait AccessController: Send + Sync {
13 fn get_type(&self) -> &str;
15
16 async fn get_authorized_by_role(&self, role: &str) -> Result<Vec<String>>;
18
19 async fn grant(&self, capability: &str, key_id: &str) -> Result<()>;
21
22 async fn revoke(&self, capability: &str, key_id: &str) -> Result<()>;
24
25 async fn load(&self, address: &str) -> Result<()>;
27
28 async fn save(&self) -> Result<Box<dyn ManifestParams>>;
30
31 async fn close(&self) -> Result<()>;
33
34 async fn can_append(
36 &self,
37 entry: &dyn access_controller::LogEntry,
38 identity_provider: &dyn IdentityProvider,
39 additional_context: &dyn access_controller::CanAppendAdditionalContext,
40 ) -> Result<()>;
41}
42
43pub type Option = Box<dyn FnOnce(&mut dyn AccessController)>;