首页>代码>ssm整合vue实现会员管理系统,含1w字论文,可做毕业设计参考实例>/会员管理系统/member/member-admin/src/main/java/co/yixiang/config/DataScope.java
/**
 * Copyright (C) 2018-2022
 * All rights reserved, Designed By www.member
 * 注意:
 * 本软件为www.member开发研制
 */
package co.yixiang.config;

import co.yixiang.modules.system.domain.Dept;
import co.yixiang.modules.system.service.DeptService;
import co.yixiang.modules.system.service.RoleService;
import co.yixiang.modules.system.service.UserService;
import co.yixiang.modules.system.service.dto.RoleSmallDto;
import co.yixiang.modules.system.service.dto.UserDto;
import co.yixiang.utils.SecurityUtils;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 数据权限配置
 * @author member
 * @date 2019-4-1
 */
@Component
public class DataScope {

    private final String[] scopeType = {"全部", "本级", "自定义"};

    private final UserService userService;

    private final RoleService roleService;

    private final DeptService deptService;

    public DataScope(UserService userService, RoleService roleService, DeptService deptService) {
        this.userService = userService;
        this.roleService = roleService;
        this.deptService = deptService;
    }

    public Set<Long> getDeptIds() {

        UserDto user = userService.findByName(SecurityUtils.getUsername());

        // 用于存储部门id
        Set<Long> deptIds = new HashSet<>();

        // 查询用户角色
        List<RoleSmallDto> roleSet = roleService.findByUsersId(user.getId());

        for (RoleSmallDto role : roleSet) {

            if (scopeType[0].equals(role.getDataScope())) {
                return new HashSet<>();
            }

            // 存储本级的数据权限
            if (scopeType[1].equals(role.getDataScope())) {
                deptIds.add(user.getDept().getId());
            }

            // 存储自定义的数据权限
            if (scopeType[2].equals(role.getDataScope())) {
                Set<Dept> depts = deptService.findByRoleIds(role.getId());
                for (Dept dept : depts) {
                    deptIds.add(dept.getId());
                    List<Dept> deptChildren = deptService.findByPid(dept.getId());
                    if (deptChildren != null && deptChildren.size() != 0) {
                        deptIds.addAll(getDeptChildren(deptChildren));
                    }
                }
            }
        }
        return deptIds;
    }


    public List<Long> getDeptChildren(List<Dept> deptList) {
        List<Long> list = new ArrayList<>();
        deptList.forEach(dept -> {
                    if (dept != null && dept.getEnabled()) {
                        List<Dept> depts = deptService.findByPid(dept.getId());
                        if (deptList.size() != 0) {
                            list.addAll(getDeptChildren(depts));
                        }
                        list.add(dept.getId());
                    }
                }
        );
        return list;
    }
}
最近下载更多
陈小灏  LV18 2月25日
java菜鸟1号  LV7 2024年12月4日
zolscy  LV24 2024年11月27日
withyouatdusk  LV2 2024年9月29日
wenjie_5419  LV13 2024年7月10日
15342201772  LV9 2024年6月25日
TY0165  LV20 2024年6月17日
bbczlitao  LV9 2024年6月11日
李怡桦  LV1 2024年6月7日
qwe6002  LV10 2024年5月24日
最近浏览更多
叉烧君  LV3 3月26日
xiaoaitx  LV8 1月1日
11999333  LV1 2024年12月23日
dengge123  LV14 2024年12月13日
java菜鸟1号  LV7 2024年12月4日
zolscy  LV24 2024年11月27日
1123efd 2024年11月11日
暂无贡献等级
972709683  LV1 2024年10月31日
yangchengshuai  LV15 2024年10月29日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友