Skip to main content

sz_rust_orm_facade/data_scope/
ext.rs

1//! DataScopeExt — 查询构建器扩展 trait
2//!
3//! 为 sz-orm 查询构建器提供 `data_scope()` 链式方法,
4//! 自动注入数据范围 WHERE 条件。
5
6use crate::data_scope::context::DataScopeContext;
7use crate::data_scope::error::DataScopeError;
8use crate::data_scope::evaluator::DataScopeEvaluator;
9use crate::data_scope::rule::DataScopeRule;
10use crate::repository::WhereCondition;
11
12/// 数据范围扩展 trait
13///
14/// 为查询构建器实现此 trait 后,可链式调用 `.data_scope_async(ctx, rule, evaluator)`
15/// 自动注入数据范围 WHERE 条件。
16#[async_trait::async_trait]
17pub trait DataScopeExt: Sized {
18    /// 同步设置数据范围(需预先评估好的条件)
19    fn with_data_scope_conditions(self, conditions: &[WhereCondition]) -> Self;
20
21    /// 异步评估并注入数据范围
22    ///
23    /// 调用 `evaluator.evaluate(ctx, rule)` 获取条件列表,
24    /// 逐个追加到查询构建器。
25    async fn data_scope_async(
26        self,
27        ctx: &DataScopeContext,
28        rule: &DataScopeRule,
29        evaluator: &dyn DataScopeEvaluator,
30    ) -> Result<Self, DataScopeError> {
31        let conditions = evaluator.evaluate(ctx, rule).await?;
32        Ok(self.with_data_scope_conditions(&conditions))
33    }
34}