mybatis plus通过java代码进行权限等全局控制

在mapper.xml中调用java静态方法,并且传递一些参数

在静态方法中进行sql拼接,可以用于用户权限管理、数据权限管理等等

一、静态方法

拼接sql,可以调用缓存中的用户权限进行拼接

package com.example.demo.dataScope;

import java.util.List;

/**
 * 数据库权限控制器
 */
public class DataScopeUtil {

    /**
     * 装置编码集合
     * @param alias 数据库表别名
     * @param deviceCodes 数据库查询条件的参数
     */
    public static String deviceCodeListScopeSql(String alias, List<String> deviceCodes){
        StringBuilder scopeSql = new StringBuilder();
        scopeSql.append(" in (select t.id from (");
        deviceCodes.stream().forEach(e->{
            String str = " (select '"+e+"' as id from dual) union";
            scopeSql.append(str);
        });
        scopeSql.replace(scopeSql.lastIndexOf("union"),scopeSql.length(),"");
        scopeSql.append(" )t )");
        scopeSql.insert(0," and "+alias);
        return scopeSql.toString();
    }

}

二、xml使用

@com.example.demo.dataScope.DataScopeUtil 包地址

@deviceCodeListScopeSql 调用的方法名称

"gyz" 表别名,可以传 ""/null

deviceCodes mapper方法的参数名称

<select>
    ${@com.example.demo.dataScope.DataScopeUtil@deviceCodeListScopeSql("gzy",deviceCodes)}
</select>

 

posted @ 2022-10-03 11:41  雨梦大木  阅读(226)  评论(0编辑  收藏  举报