Skip to content

数据权限扩展

适用范围

Pangea v2.2.0及以上版本

快速上手

首先,您需要检查当前业务模块是否依赖pangea-common-datascope包,如没有则依赖pangea-common-datascope,如下代码:

xml
<dependency>
	<groupId>com.hisense.pangea</groupId>
	<artifactId>pangea-common-datascope</artifactId>
	<version>${pangea.version}</version>
</dependency>

实现DataScopeExtend接口,并重写getDataScope方法:

java
import com.hisense.pangea.datascope.domain.DataScopeVO;
import com.hisense.pangea.datascope.enums.RuleColumnType;
import com.hisense.pangea.datascope.enums.RuleConditions;
import com.hisense.pangea.datascope.enums.RuleType;
import com.hisense.pangea.datascope.enums.RuleValueType;
import com.hisense.pangea.datascope.extend.DataScopeExtend;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service  //注意:此处添加Service注解, 使之交于IOC容器管理bean
public class DataScopeExtendImpl implements DataScopeExtend {
    /**
     *
     * @param userInfo  当前登录用户信息
     * @param menuCode  当前拦截菜单编码
     * @return
     * @描述 获取业务系统自定义的数据权限
     * @使用 业务系统实现此接口并自定义数据权限获取逻辑, 此接口将传入用户信息及菜单编码
     */
    @Override
    public List<DataScopeVO> getDataScope(UserModel userInfo, String menuCode) {
        // userInfo和menuCode参数为框架传入参数,供业务系统使用
        // 通过userInfo可以获取以下用户信息
        // 用户ID (唯一)
        Long userId = userModel.getUserId();
        // 账号名 (唯一)
        String loginName = userModel.getLoginName();
        // 中文名
        String userNameZH = userModel.getUserName();
        // 角色编码
        List<String> roleCodes = userModel.getRoleCodes();

        //TODO 此处为模拟业务系统扩展的自定义规则, 仅供参考
        List<DataScopeVO> lists = new ArrayList<>();
        DataScopeVO vo = new DataScopeVO();
        //规则值
        vo.setRuleValue("admin");
        //菜单编码
        vo.setMenuCode("userMenu");
        //规则字段
        vo.setRuleColumn("lgoinName");
        //规则类型
        vo.setRuleType(RuleType.COLUMN_RULE);
        //规则字段类型
        vo.setRuleColumnType(RuleColumnType.CONFIG);
        //规则条件
        vo.setRuleConditions(RuleConditions.BE_EQUAL_TO); // 等于条件
        //规则值类型
        vo.setRuleValueType(RuleValueType.CUSTOM_VALUE);
        lists.add(vo);
        return lists;
    }
}

至此,自定义数据权限已完成。