作者 朱兆平

修复登录成功权限列表获取为树形改为非树形

... ... @@ -89,7 +89,7 @@ public class PermssionController {
}
return resultJson;
}
@LogAnnotation(moduleName = "权限管理",operate = "权限批量删除")
@LogAnnotation(moduleName = "权限管理",operate = "查找权限")
@GetMapping("/findByRoleId")
public ResultJson findByRoleId(@RequestParam Integer roleId){
... ... @@ -101,4 +101,10 @@ public class PermssionController {
resultJson.setMsg("SUCCESS");
return resultJson;
}
@GetMapping("/flushPermCache")
public ResultJson flushPermCache(){
permissionService.flushCache();
return new ResultJson("200","清理缓存成功");
}
}
... ...
... ... @@ -26,6 +26,13 @@ public interface PERMISSIONMapper {
List<PERMISSION> findByUserId(Integer userId);
/**
* 登录验证成功后获取用户权限列表非树形结构
* @param userId
* @return
*/
List<PERMISSION> findByUserIdWithLogin(Integer userId);
List<PERMISSION> findByRoleId(Integer roleId);
List<String> findRoleListByUrl(String permissionUrl);
... ...
package com.tianbo.warehouse.model;
import java.io.Serializable;
import java.util.List;
public class PERMISSION {
public class PERMISSION implements Serializable {
private static final long serialVersionUID = 1L;
private Integer permissionId;
private String name;
... ...
... ... @@ -27,4 +27,16 @@ public interface PermissionService {
int updateByPrimaryKeySelective(PERMISSION permission);
int deleteByPrimaryKey(String companyId);
/**
* 登录验证成功后获取用户权限列表非树形结构
* @param userId
* @return
*/
List<PERMISSION> findByUserIdWithLogin(Integer userId);
/**
* 清理跟permission相关的所有缓存
*/
void flushCache();
}
... ...
... ... @@ -3,6 +3,9 @@ package com.tianbo.warehouse.service.imp;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tianbo.warehouse.annotation.cache.annotation.RedisCacheDelTarget;
import com.tianbo.warehouse.annotation.cache.annotation.RedisCacheEvict;
import com.tianbo.warehouse.annotation.cache.annotation.RedisCacheable;
import com.tianbo.warehouse.dao.PERMISSIONMapper;
import com.tianbo.warehouse.model.PERMISSION;
import com.tianbo.warehouse.service.PermissionService;
... ... @@ -21,19 +24,23 @@ public class PermissionServiceImp implements PermissionService {
PERMISSIONMapper permissionMapper;
@Override
@RedisCacheable(cacheKey = "findAllMenus")
public PageInfo<PERMISSION> findAll(int pageNum, int pageSize, String name) {
Page<PERMISSION> page = PageHelper.startPage(pageNum, 0,true,true,true);
List<PERMISSION> list = permissionMapper.findAll(name);
PageInfo<PERMISSION> result = new PageInfo<>(getPermissionList(list, 0));
return result;
}
@Override
@RedisCacheable(cacheKey = "findByRoleId")
public List<PERMISSION> findByRoleId(Integer roleId) {
List<PERMISSION> list = getPermissionList(permissionMapper.findByRoleId(roleId), 0);
return list;
}
@Override
@RedisCacheDelTarget(cacheKey = "com.tianbo.warehouse.service.imp.PermissionServiceImp")
public int insertSelective(PERMISSION record) {
return permissionMapper.insertSelective(record);
}
... ... @@ -50,7 +57,25 @@ public class PermissionServiceImp implements PermissionService {
return permissionList;
}
/**
* 登录验证成功后获取用户权限列表非树形结构,代表用户所能访问的所有权限。
* 最终存储redis,由gateway读取进行权限判定
* @param userId
* @return
*/
@Override
@RedisCacheable(cacheKey = "findByUserIdWithLogin")
public List<PERMISSION> findByUserIdWithLogin(Integer userId){
return permissionMapper.findByUserIdWithLogin(userId);
}
/**
* 返回用户权限的树形列表
* @param userId
* @return
*/
@Override
@RedisCacheable(cacheKey = "getUserMenusTree")//添加缓存
public Map<String, Object> getUserMenus(Integer userId) {
Map<String, Object> data = new HashMap<String, Object>();
try {
... ... @@ -117,11 +142,18 @@ public class PermissionServiceImp implements PermissionService {
@Override
@RedisCacheDelTarget(cacheKey = "com.tianbo.warehouse.service.imp.PermissionServiceImp")
public int updateByPrimaryKeySelective(PERMISSION permission) {
return permissionMapper.updateByPrimaryKeySelective(permission);
}
/** 批量删除
*
* @param permissionId
* @return
*/
@Override
@RedisCacheDelTarget(cacheKey = "com.tianbo.warehouse.service.imp.PermissionServiceImp")
public int deleteByPrimaryKey(String permissionId) {
if (permissionId.contains(",")) {
try {
... ... @@ -140,4 +172,10 @@ public class PermissionServiceImp implements PermissionService {
}
}
@RedisCacheDelTarget(cacheKey = "com.tianbo.warehouse.service.imp.PermissionServiceImp")
@Override
public void flushCache(){
}
}
... ...
... ... @@ -11,6 +11,7 @@ import com.tianbo.warehouse.model.PERMISSION;
import com.tianbo.warehouse.model.ROLE;
import com.tianbo.warehouse.model.USERS;
import com.tianbo.warehouse.model.UserRole;
import com.tianbo.warehouse.service.PermissionService;
import com.tianbo.warehouse.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
... ... @@ -26,15 +27,18 @@ public class UserServiceImpl implements UserService{
@Resource
private USERSMapper usersMapper;
@Autowired
@Resource
private ROLEMapper roleMapper;
@Autowired
@Resource
private PERMISSIONMapper permissionMapper;
@Autowired
@Resource
private UserRoleMapper userRoleMapper;
@Autowired
private PermissionService permissionService;
@Override
public USERS loadByUsername(String username){
List<USERS> userList = usersMapper.selectByUsername(username);
... ... @@ -42,7 +46,7 @@ public class UserServiceImpl implements UserService{
if (userList != null && userList.size() > 0) {
USERS user = userList.get(0);
List<PERMISSION> permissionList = permissionMapper.findByUserId(user.getUserId());
List<PERMISSION> permissionList = permissionService.findByUserIdWithLogin(user.getUserId());
if (permissionList!=null && permissionList.size()>0){
user.setPermissions(permissionList);
}
... ...
... ... @@ -140,6 +140,36 @@ where P.url = #{permissionUrl,jdbcType=VARCHAR} ORDER BY permission_order
AND P.parent_id = 0
ORDER BY permission_order
</select>
<select id="findByUserIdWithLogin" parameterType="java.lang.Integer" resultMap="BaseResultMap">
SELECT
P.*
FROM
permission P
WHERE
P.permission_id IN (
SELECT
RP.permission_id
FROM
role_permission RP
WHERE
RP.role_id IN (
SELECT
R.role_id
FROM
role R
WHERE
R.role_id IN (
SELECT
UR.role_id
FROM
user_role UR
WHERE
UR.user_id = #{userId,jdbcType=INTEGER}
)
)
)
ORDER BY permission_order
</select>
<select id="findByRoleId" resultMap="BaseResultMap" parameterType="integer">
SELECT
P.*
... ...