package com.changhu.support.mybatisplus.handler.permission;

import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;


/**
 * @author 20252
 * @createTime 2024/7/31 下午4:02
 * @desc 所有具体负责权限处理的类都需要继承此接口
 */
public interface AbstractDataPermissionHandler {

    /**
     * 永远不成立的条件
     */
    EqualsTo neverEq = new EqualsTo(new Column("1"), new LongValue(2));

    /**
     * 获取数据权限 SQL 片段表达式
     *
     * @param table             所执行的数据库表信息，可以通过此参数获取表名和表别名
     * @param where             待执行 SQL Where 条件表达式
     * @param mappedStatementId Mybatis MappedStatement Id 根据该参数可以判断具体执行方法
     * @return 数据权限 SQL 片段表达式
     */
    Expression apply(Table table, Expression where, String mappedStatementId);

    default Expression sqlFragment() {
        return null;
    }

}
