All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.yiuman.citrus.system.service.AuthorityService Maven / Gradle / Ivy

package com.github.yiuman.citrus.system.service;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.yiuman.citrus.support.crud.service.BaseDtoService;
import com.github.yiuman.citrus.system.dto.AuthorityDto;
import com.github.yiuman.citrus.system.entity.Authority;
import com.github.yiuman.citrus.system.entity.AuthorityResource;
import com.github.yiuman.citrus.system.entity.Resource;
import com.github.yiuman.citrus.system.mapper.AuthorityResourceMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

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

/**
 * 权限操作逻辑层
 *
 * @author yiuman
 * @date 2020/4/11
 */
@Service
@AllArgsConstructor
public class AuthorityService extends BaseDtoService {

    private final AuthorityResourceMapper authorityResourceMapper;

    @Override
    public AuthorityDto get(Long key) {
        AuthorityDto authorityDto = super.get(key);
        //查询当前权限的资源列表,菜单资源及菜单操作
        List authorityResources = authorityResourceMapper.selectList(
                Wrappers.query()
                        .eq(getKeyColumn(), authorityDto.getAuthorityId())
                        .eq("type", 0)
        );
        authorityResources.forEach(item -> item.setOperations(
                authorityResourceMapper.selectList(
                        Wrappers.query()
                                .eq(getKeyColumn(), authorityDto.getAuthorityId())
                                .eq("object_id", item.getResourceId())
                                .eq("type", 2))
                )
        );

        authorityDto.setResources(authorityResources);
        return authorityDto;
    }

    @Override
    public void afterSave(AuthorityDto entity) throws Exception {
        //保存资源与权限的关系
        List resources = entity.getResources();

        //先删掉旧的
        if (entity.getAuthorityId() != null) {
            authorityResourceMapper.delete(Wrappers.query()
                    .eq(getKeyColumn(), entity.getAuthorityId()));
        }

        if (!CollectionUtils.isEmpty(resources)) {
            final List allResource = new ArrayList<>(resources);
            //把操作资源也加到权限资源里边去
            resources.forEach(item -> allResource.addAll(item.getOperations()));
            allResource.forEach(item -> item.setAuthorityId(entity.getAuthorityId()));
            authorityResourceMapper.saveBatch(allResource);
        }

    }

    /**
     * 根据用户I查询此用户的权限与资源配置的集合
     *
     * @param userId 用户ID
     * @return 权限资源结合
     */
    public Set getAuthorityResourceByUserIdAndResourceId(Long userId) {
        return authorityResourceMapper.getAuthorityResourceByUserIdAndResourceId(userId);
    }

    public Set getUserResources(Long userId) {
        return authorityResourceMapper.getResourcesByUserId(userId);
    }

    public Set getAuthoritiesByUserId(Long userId) {
        return authorityResourceMapper.getAuthoritiesByUserId(userId);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy