use wasm_dbms_api::prelude::{
IdentityPerms, MemoryResult, PermGrant, PermRevoke, TableFingerprint, TablePerms,
};
use crate::{MemoryManager, MemoryProvider};
pub trait AccessControl: Default {
type Id;
fn load<M>(mm: &mut MemoryManager<M>) -> MemoryResult<Self>
where
M: MemoryProvider,
Self: Sized;
fn granted(&self, id: &Self::Id, table: TableFingerprint, perm: TablePerms) -> bool;
fn granted_admin(&self, id: &Self::Id) -> bool;
fn granted_manage_acl(&self, id: &Self::Id) -> bool;
fn granted_migrate(&self, id: &Self::Id) -> bool;
fn grant<M>(
&mut self,
id: Self::Id,
grant: PermGrant,
mm: &mut MemoryManager<M>,
) -> MemoryResult<()>
where
M: MemoryProvider;
fn revoke<M>(
&mut self,
id: &Self::Id,
revoke: PermRevoke,
mm: &mut MemoryManager<M>,
) -> MemoryResult<()>
where
M: MemoryProvider;
fn remove_identity<M>(&mut self, id: &Self::Id, mm: &mut MemoryManager<M>) -> MemoryResult<()>
where
M: MemoryProvider;
fn perms(&self, id: &Self::Id) -> IdentityPerms;
fn identities(&self) -> Vec<(Self::Id, IdentityPerms)>;
}