use crate::data_scope::context::DataScopeContext;
use crate::data_scope::error::DataScopeError;
use crate::data_scope::evaluator::DataScopeEvaluator;
use crate::data_scope::rule::DataScopeRule;
use crate::repository::WhereCondition;
#[async_trait::async_trait]
pub trait DataScopeExt: Sized {
fn with_data_scope_conditions(self, conditions: &[WhereCondition]) -> Self;
async fn data_scope_async(
self,
ctx: &DataScopeContext,
rule: &DataScopeRule,
evaluator: &dyn DataScopeEvaluator,
) -> Result<Self, DataScopeError> {
let conditions = evaluator.evaluate(ctx, rule).await?;
Ok(self.with_data_scope_conditions(&conditions))
}
}