package com.changhu.support.mybatisplus.interceptor;

import com.baomidou.mybatisplus.extension.plugins.handler.MultiDataPermissionHandler;
import com.changhu.support.mybatisplus.config.DataScopeManage;
import com.changhu.support.mybatisplus.handler.permission.AbstractDataPermissionHandler;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.schema.Table;


/**
 * @author 20252
 * @createTime 2024/7/31 下午3:34
 * @desc 自定义的数据权限处理器
 */
@Slf4j
public class CustomDataPermissionHandler implements MultiDataPermissionHandler {

    /**
     * 获取数据权限 SQL 片段表达式
     *
     * @param table             所执行的数据库表信息，可以通过此参数获取表名和表别名
     * @param where             待执行 SQL Where 条件表达式
     * @param mappedStatementId Mybatis MappedStatementId 根据该参数可以判断具体执行方法
     * @return 数据权限 SQL 片段表达式
     */
    @Override
    public Expression getSqlSegment(Table table, Expression where, String mappedStatementId) {
        AbstractDataPermissionHandler abstractDataPermissionHandler = DataScopeManage.getDataScopeHandler(mappedStatementId);
        if (abstractDataPermissionHandler == null) {
            return null;
        }
        return abstractDataPermissionHandler.apply(table, where, mappedStatementId);
    }
}
