use async_trait::async_trait;
use uuid::Uuid;
use crate::types::DatabaseError;
#[async_trait]
pub trait AclDb: Send + Sync {
async fn has_permission(
&self,
principal_id: Uuid,
dataset_id: Uuid,
permission_name: &str,
) -> Result<bool, DatabaseError>;
async fn authorized_dataset_ids(
&self,
principal_id: Uuid,
permission_name: &str,
) -> Result<Vec<Uuid>, DatabaseError>;
async fn grant_permission(
&self,
principal_id: Uuid,
dataset_id: Uuid,
permission_name: &str,
) -> Result<(), DatabaseError>;
async fn revoke_permission(
&self,
principal_id: Uuid,
dataset_id: Uuid,
permission_name: &str,
) -> Result<(), DatabaseError>;
async fn ensure_principal(
&self,
principal_id: Uuid,
principal_type: &str,
) -> Result<(), DatabaseError>;
async fn has_permission_with_roles(
&self,
user_id: Uuid,
dataset_id: Uuid,
permission_name: &str,
) -> Result<bool, DatabaseError>;
async fn authorized_dataset_ids_with_roles(
&self,
user_id: Uuid,
permission_name: &str,
) -> Result<Vec<Uuid>, DatabaseError>;
}