guardian_db/access_controller/
traits.rs

1use 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/// A trait que todos os controladores de acesso do GuardianDB devem implementar.
11#[async_trait]
12pub trait AccessController: Send + Sync {
13    /// Retorna o tipo do controlador de acesso como uma string.
14    fn get_type(&self) -> &str;
15
16    /// Retorna a lista de chaves autorizadas para uma dada permissão ("role").
17    async fn get_authorized_by_role(&self, role: &str) -> Result<Vec<String>>;
18
19    /// Concede a uma nova chave uma determinada permissão.
20    async fn grant(&self, capability: &str, key_id: &str) -> Result<()>;
21
22    /// Remove a permissão de uma chave para realizar uma ação.
23    async fn revoke(&self, capability: &str, key_id: &str) -> Result<()>;
24
25    /// Carrega a configuração do controlador de acesso a partir de um endereço.
26    async fn load(&self, address: &str) -> Result<()>;
27
28    /// Salva/persiste a configuração do controlador (seu manifesto).
29    async fn save(&self) -> Result<Box<dyn ManifestParams>>;
30
31    /// Fecha o controlador e libera quaisquer recursos.
32    async fn close(&self) -> Result<()>;
33
34    /// Verifica se uma entrada pode ser adicionada ao log.
35    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)>;