package com.oying.modules.system.service.impl; import cn.hutool.core.collection.CollUtil; import com.oying.modules.system.domain.Role; import com.oying.modules.system.domain.User; import lombok.RequiredArgsConstructor; import com.oying.modules.system.service.DataService; import com.oying.modules.system.service.RoleService; import com.oying.utils.CacheKey; import com.oying.utils.RedisUtils; import com.oying.utils.enums.DataScopeEnum; import org.springframework.stereotype.Service; import java.util.*; import java.util.concurrent.TimeUnit; /** * @author Z * @description 数据权限服务实现 * @date 2020-05-07 **/ @Service @RequiredArgsConstructor public class DataServiceImpl implements DataService { private final RedisUtils redisUtils; private final RoleService roleService; /** * 用户角色和用户机构改变时需清理缓存 * @param user / * @return / */ @Override public List getDataIds(User user) { String key = CacheKey.DATA_USER + user.getId(); List ids = redisUtils.getList(key, Long.class); if (CollUtil.isEmpty(ids)) { Set dataIds = new HashSet<>(); // 查询用户角色 List roleList = roleService.findByUsersId(user.getId()); // 获取对应的机构ID for (Role role : roleList) { DataScopeEnum dataScopeEnum = DataScopeEnum.find(role.getDataScope()); switch (Objects.requireNonNull(dataScopeEnum)) { case THIS_LEVEL: break; case CUSTOMIZE: dataIds.addAll(getCustomize(dataIds, role)); break; default: return new ArrayList<>(); } } ids = new ArrayList<>(dataIds); redisUtils.set(key, ids, 1, TimeUnit.DAYS); } return ids; } /** * 获取自定义的数据权限 * @param dataIds 机构ID * @param role 角色 * @return 数据权限ID */ public Set getCustomize(Set dataIds, Role role){ System.out.println(role); return dataIds; } }