/** * Copyright (c) 2018 人人开源 All rights reserved. * * https://www.renren.io * * 版权所有,侵权必究! */ package com.zt.security.service; import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; import com.zt.core.sys.model.SysDept; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import com.zt.common.constant.CacheKey; import com.zt.common.constant.Constant; import com.zt.common.utils.CacheUtils; import com.zt.core.context.User; import com.zt.core.context.UserContext; import com.zt.core.sys.model.SysUser; import com.zt.modules.sys.dao.SysMenuDao; import com.zt.modules.sys.dao.SysDeptDao; import com.zt.modules.sys.mapstruct.SysUserMapper; import com.zt.modules.sys.service.SysUserService; import com.zt.modules.sys.service.SysDeptService; import com.zt.security.model.SysUserToken; /** * shiro相关接口 * * @author hehz */ @Service public class ShiroService { @Resource private SysUserMapper sysUserMapper; @Autowired private SysMenuDao sysMenuDao; @Autowired private SysUserService sysUserService; @Autowired private SysDeptService sysDeptService; @Autowired private SysUserTokenService sysUserTokenService; public SysUserToken getByToken(String token) { return sysUserTokenService.getByToken(token); } public void updateTokenById(SysUserToken tokenEntity) { sysUserTokenService.updateById(tokenEntity); } @Cacheable(value = Constant.Cache.TOKEN, key = "'user:' + #userId") public User getUser(Long userId) { SysUser entity = sysUserService.get(userId); User user = sysUserMapper.toUser(entity); user.setPlatform(Constant.Sys.PLATFORM_TENANT_ID == user.getTenantId()); user.setPermissions(getUserPermissions(user)); SysDept dept = sysDeptService.get(user.getCompanyId()); if (dept!=null){ user.setUnitType(dept.getNature()); user.setUnitCode(dept.getCode()); } return user; } /** * 获取用户权限列表 */ private Set getUserPermissions(User user) { // 系统管理员,拥有最高权限 List permissionsList; if (user.isSuperAdmin()) { permissionsList = sysMenuDao.getPermissionsList(); permissionsList.add(Constant.Permissions.SUPER_ADMIN);// 超级管理员权限 } else { permissionsList = sysMenuDao.getUserMenuList(user.getTenantId(), user.getId()).stream() .map(menu -> menu.getPermissions()).collect(Collectors.toList()); } // 用户权限列表 Set permsSet = new HashSet<>(); for (String permissions : permissionsList) { if (StringUtils.isBlank(permissions)) { continue; } permsSet.addAll(Arrays.asList(permissions.trim().split(","))); } return permsSet; } }