PermissionService.java 2.45 KB
package com.myxrk.rbac.service;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.myxrk.rbac.dao.SysDataGridMapper;
import com.myxrk.rbac.dao.SysRoleDataGridMapper;
import com.myxrk.rbac.dao.SysUserMapper;
import com.myxrk.rbac.dao.SysUserRoleMapper;
import com.myxrk.rbac.po.SysDataGrid;
import com.myxrk.rbac.po.SysRoleDataGrid;
import com.myxrk.rbac.po.SysUser;
import com.myxrk.rbac.po.SysUserRole;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@Slf4j
@Service
public class PermissionService {
    private final SysUserMapper sysUserMapper;
    private final SysUserRoleMapper sysUserRoleMapper;
    private final SysRoleDataGridMapper sysRoleDataGridMapper;
    private final SysDataGridMapper sysDataGridMapper;


    public PermissionService(SysUserMapper sysUserMapper, SysUserRoleMapper sysUserRoleMapper, SysRoleDataGridMapper sysRoleDataGridMapper, SysDataGridMapper sysDataGridMapper) {
        this.sysUserMapper = sysUserMapper;
        this.sysUserRoleMapper = sysUserRoleMapper;
        this.sysRoleDataGridMapper = sysRoleDataGridMapper;
        this.sysDataGridMapper = sysDataGridMapper;
    }

    public SysUser getSysUser() {
        // 获取当前用户
        String username = (String) SecurityUtils.getSubject().getPrincipal();
        return sysUserMapper.selectOne(Wrappers.query(SysUser.class).eq("username", username));
    }

    public List<SysUser> getAllUsers() {
        return sysUserMapper.selectList(null);
    }

    public Long getActiveRole() {
        List<SysUserRole> sysUserRole = sysUserRoleMapper.selectList(Wrappers.query(SysUserRole.class).eq("user_id", getSysUser().getUserId()));
        Set<Long> roles = sysUserRole.stream().map(SysUserRole::getRoleId).collect(Collectors.toSet());
        return roles.iterator().next();
    }

    public List<String> getColumnsByRoleAndDataGridKey(String dgKey, Long role) {
        SysDataGrid sysDataGrid = sysDataGridMapper.selectOne(Wrappers.query(SysDataGrid.class).eq("dg_key", dgKey));
        List<SysRoleDataGrid> sysRoleDataGrids = sysRoleDataGridMapper.selectList(Wrappers.query(SysRoleDataGrid.class).eq("role_id", role).eq("dg_id", sysDataGrid.getId()));
        return sysRoleDataGrids.stream()
                .flatMap(dataGrid -> Stream.of(dataGrid.getColumns().split(","))).toList();
    }


}