提交 5983b442 作者: obcy

‘所有’节点下权限处理

上级 14f7d1c2
...@@ -57,7 +57,7 @@ public class KbKnowledgeProjectController { ...@@ -57,7 +57,7 @@ public class KbKnowledgeProjectController {
public Result<?> list( public Result<?> list(
@RequestParam(name="sign",defaultValue = "1") String sign, @RequestParam(name="sign",defaultValue = "1") String sign,
@RequestParam(name="category",required = false) String category, @RequestParam(name="category",required = false) String category,
@RequestParam(name="projectId",required = false) String projectId, @RequestParam(name="projectId",defaultValue = "0") String projectId,
HttpServletRequest httpServletRequest HttpServletRequest httpServletRequest
){ ){
if (!"1".equals(sign)){ if (!"1".equals(sign)){
......
...@@ -6,10 +6,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; ...@@ -6,10 +6,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzsn.knowbase.entity.KbAuthorizedUser; import com.zzsn.knowbase.entity.KbAuthorizedUser;
import com.zzsn.knowbase.vo.UserKnowPermissionVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
import java.util.List;
/** /**
* <p> * <p>
* Mapper 接口 * Mapper 接口
...@@ -30,6 +33,22 @@ public interface KbAuthorizedUserMapper extends BaseMapper<KbAuthorizedUser> { ...@@ -30,6 +33,22 @@ public interface KbAuthorizedUserMapper extends BaseMapper<KbAuthorizedUser> {
) )
IPage<KbAuthorizedUser> pageList(Page<KbAuthorizedUser> page, @Param(Constants.WRAPPER) QueryWrapper<KbAuthorizedUser> query); IPage<KbAuthorizedUser> pageList(Page<KbAuthorizedUser> page, @Param(Constants.WRAPPER) QueryWrapper<KbAuthorizedUser> query);
@Select("SELECT a.*,GROUP_CONCAT(b.role_id SEPARATOR ',') as roleId,GROUP_CONCAT(c.role_name SEPARATOR ',') as roleName, b.knowledge_project_id FROM kb_authorized_user a " +
"LEFT JOIN kb_user_role_map b ON a.id = b.user_id " +
"LEFT JOIN kb_role c ON c.id = b.role_id " +
"${ew.customSqlSegment}"+
"GROUP BY a.id"
)
List<KbAuthorizedUser> listByUserIdAndProId(@Param(Constants.WRAPPER) QueryWrapper<KbAuthorizedUser> query);
@Select("SELECT a.user_id,a.knowledge_project_id,a.role_id,b.role_code,b.role_name,d.permission_code,d.permission_name FROM kb_user_role_map a " +
"LEFT JOIN kb_role b ON a.role_id = b.id " +
"LEFT JOIN kb_role_permission_map c ON b.id = c.role_id " +
"LEFT JOIN kb_permissions d ON c.permission_id = d.id " +
"WHERE a.user_id = #{userId}"
)
List<UserKnowPermissionVo> getUserPermission(String userId);
@Select("SELECT a.*,GROUP_CONCAT(b.role_id SEPARATOR ',') as roleId,GROUP_CONCAT(c.role_name SEPARATOR ',') as roleName FROM kb_authorized_user a " + @Select("SELECT a.*,GROUP_CONCAT(b.role_id SEPARATOR ',') as roleId,GROUP_CONCAT(c.role_name SEPARATOR ',') as roleName FROM kb_authorized_user a " +
"LEFT JOIN kb_user_role_map b ON a.id = b.user_id " + "LEFT JOIN kb_user_role_map b ON a.id = b.user_id " +
......
...@@ -389,36 +389,67 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap ...@@ -389,36 +389,67 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
String knowProId = authorizedUser.getKnowledgeProjectId(); String knowProId = authorizedUser.getKnowledgeProjectId();
authorizedUser.setUpdateTime(new Date()); authorizedUser.setUpdateTime(new Date());
super.updateById(authorizedUser); super.updateById(authorizedUser);
/**修改用户角色关系表*/
if (StringUtils.isNotBlank(newRole)){
//所编辑知识库分类节点下所有的子节点
List<KbKnowledgeProject> knowPros = knowledgeProjectService.list(Wrappers.<KbKnowledgeProject>lambdaQuery()
.like(KbKnowledgeProject::getFullPath, knowProId)
);
List<String> knowProIds = knowPros.stream().map(KbKnowledgeProject::getId).collect(Collectors.toList()); if (!"0".equals(knowProId)) {
/**修改用户角色关系表*/
if (StringUtils.isNotBlank(newRole)){
//所编辑知识库分类节点下所有的子节点
List<KbKnowledgeProject> knowPros = knowledgeProjectService.list(Wrappers.<KbKnowledgeProject>lambdaQuery()
.like(KbKnowledgeProject::getFullPath, knowProId)
);
kbUserRoleMapService.remove(Wrappers.<KbUserRoleMap>lambdaQuery()
.eq(KbUserRoleMap::getUserId,authorizedUser.getId())
.in(KbUserRoleMap::getKnowledgeProjectId,knowProIds)
);
List<String> list = Arrays.asList(newRole.split(",")); List<String> knowProIds = knowPros.stream().map(KbKnowledgeProject::getId).collect(Collectors.toList());
List<KbUserRoleMap> maps = new ArrayList<>();
list.forEach(e->{ kbUserRoleMapService.remove(Wrappers.<KbUserRoleMap>lambdaQuery()
knowProIds.forEach(ee->{ .eq(KbUserRoleMap::getUserId,authorizedUser.getId())
.in(KbUserRoleMap::getKnowledgeProjectId,knowProIds)
);
List<String> list = Arrays.asList(newRole.split(","));
List<KbUserRoleMap> maps = new ArrayList<>();
list.forEach(e->{
knowProIds.forEach(ee->{
KbUserRoleMap kbUserRoleMap = new KbUserRoleMap();
kbUserRoleMap.setUserId(authorizedUser.getId());
kbUserRoleMap.setRoleId(e);
kbUserRoleMap.setKnowledgeProjectId(ee);
kbUserRoleMap.setCreateDate(new Date());
maps.add(kbUserRoleMap);
});
});
kbUserRoleMapService.saveBatch(maps);
}
}else {
kbUserRoleMapService.remove(Wrappers.<KbUserRoleMap>lambdaQuery().eq(KbUserRoleMap::getUserId,authorizedUser.getId()));
authuserKnowledgeprojectMapService.remove(Wrappers.<KbAuthuserKnowledgeprojectMap>lambdaQuery().eq(KbAuthuserKnowledgeprojectMap::getAuthUserId,authorizedUser.getId()));
kbAuthuserKnowMapService.remove(Wrappers.<KbAuthuserKnowMap>lambdaQuery().eq(KbAuthuserKnowMap::getAuthUserId,authorizedUser.getId()));
/**插入用户知识库权限关系表*/
if (StringUtils.isNotBlank(authorizedUser.getKnowledgeProjectId())){
KbAuthuserKnowledgeprojectMap kbAuthuserKnowledgeprojectMap = new KbAuthuserKnowledgeprojectMap();
kbAuthuserKnowledgeprojectMap.setAuthUserId(authorizedUser.getId());
kbAuthuserKnowledgeprojectMap.setKnowledgeProjectId(authorizedUser.getKnowledgeProjectId());
kbAuthuserKnowledgeprojectMap.setSign(0);
authuserKnowledgeprojectMapService.save(kbAuthuserKnowledgeprojectMap);
}
/**插入用户角色关系表*/
if (StringUtils.isNotBlank(authorizedUser.getRoleId())){
String roleId = authorizedUser.getRoleId();
List<String> list = Arrays.asList(roleId.split(","));
List<KbUserRoleMap> maps = new ArrayList<>();
list.forEach(e->{
KbUserRoleMap kbUserRoleMap = new KbUserRoleMap(); KbUserRoleMap kbUserRoleMap = new KbUserRoleMap();
kbUserRoleMap.setUserId(authorizedUser.getId()); kbUserRoleMap.setUserId(authorizedUser.getId());
kbUserRoleMap.setRoleId(e); kbUserRoleMap.setRoleId(e);
kbUserRoleMap.setKnowledgeProjectId(ee); kbUserRoleMap.setKnowledgeProjectId(authorizedUser.getKnowledgeProjectId());
kbUserRoleMap.setCreateDate(new Date());
maps.add(kbUserRoleMap); maps.add(kbUserRoleMap);
}); });
kbUserRoleMapService.saveBatch(maps);
}); }
kbUserRoleMapService.saveBatch(maps);
} }
return Result.OK(); return Result.OK();
} }
...@@ -460,9 +491,17 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap ...@@ -460,9 +491,17 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
} }
/**查询授权用户的角色和权限*/ /**查询授权用户的角色和权限*/
UserInfoVo userInfoVo = new UserInfoVo(); UserInfoVo userInfoVo = new UserInfoVo();
/**查询授权用户,“所有”节点的角色优先*/
QueryWrapper<KbAuthorizedUser> query = new QueryWrapper<>(); QueryWrapper<KbAuthorizedUser> query = new QueryWrapper<>();
query.eq("a.user_id",bean.getUserId()); query.eq("a.user_id",bean.getUserId());
query.eq("b.knowledge_project_id","0");
KbAuthorizedUser one = authorizedUserMapper.getOne(query); KbAuthorizedUser one = authorizedUserMapper.getOne(query);
if (ObjectUtil.isEmpty(one) || StringUtils.isBlank(one.getRoleId())){
QueryWrapper<KbAuthorizedUser> query1 = new QueryWrapper<>();
query.eq("a.user_id",bean.getUserId());
one = authorizedUserMapper.getOne(query1);
}
/**是否是所有节点的管理员*/ /**是否是所有节点的管理员*/
List<KbAuthuserKnowledgeprojectMap> list1 = authuserKnowledgeprojectMapService.list(Wrappers.<KbAuthuserKnowledgeprojectMap>lambdaQuery() List<KbAuthuserKnowledgeprojectMap> list1 = authuserKnowledgeprojectMapService.list(Wrappers.<KbAuthuserKnowledgeprojectMap>lambdaQuery()
.eq(KbAuthuserKnowledgeprojectMap::getAuthUserId, one.getId()) .eq(KbAuthuserKnowledgeprojectMap::getAuthUserId, one.getId())
...@@ -503,7 +542,7 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap ...@@ -503,7 +542,7 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
@Override @Override
public Result<?> thirdpartyUsers(String token, String name, String username, String knowledgeProjectId, Integer pageNum, Integer pageSize) { public Result<?> thirdpartyUsers(String token, String name, String username, String knowledgeProjectId, Integer pageNum, Integer pageSize) {
//查询出这个节点已经受过权的用户 //查询出这个节点已经受过权的用户
List<KbAuthuserKnowledgeprojectMap> list1 = authuserKnowledgeprojectMapService.list(Wrappers.<KbAuthuserKnowledgeprojectMap>lambdaQuery().and(i -> i.eq(KbAuthuserKnowledgeprojectMap::getKnowledgeProjectId, knowledgeProjectId).or().eq(KbAuthuserKnowledgeprojectMap::getKnowledgeProjectId,"0"))); List<KbAuthuserKnowledgeprojectMap> list1 = authuserKnowledgeprojectMapService.list(Wrappers.<KbAuthuserKnowledgeprojectMap>lambdaQuery().eq(KbAuthuserKnowledgeprojectMap::getKnowledgeProjectId, knowledgeProjectId));
StringBuffer exists = new StringBuffer(); StringBuffer exists = new StringBuffer();
if (CollectionUtil.isNotEmpty(list1)){ if (CollectionUtil.isNotEmpty(list1)){
List<String> collect = list1.stream().map(KbAuthuserKnowledgeprojectMap::getAuthUserId).collect(Collectors.toList()); List<String> collect = list1.stream().map(KbAuthuserKnowledgeprojectMap::getAuthUserId).collect(Collectors.toList());
...@@ -557,10 +596,16 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap ...@@ -557,10 +596,16 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
if (CollectionUtil.isEmpty(list)) { if (CollectionUtil.isEmpty(list)) {
return Result.error("该用户还未进行授权访问,请联系管理员进行授权"); return Result.error("该用户还未进行授权访问,请联系管理员进行授权");
} }
/**查询授权用户*/ /**查询授权用户,“所有”节点的角色优先*/
QueryWrapper<KbAuthorizedUser> query = new QueryWrapper<>(); QueryWrapper<KbAuthorizedUser> query = new QueryWrapper<>();
query.eq("a.user_id",bean.getUserId()); query.eq("a.user_id",bean.getUserId());
query.eq("b.knowledge_project_id","0");
KbAuthorizedUser one = authorizedUserMapper.getOne(query); KbAuthorizedUser one = authorizedUserMapper.getOne(query);
if (ObjectUtil.isEmpty(one) || StringUtils.isBlank(one.getRoleId())){
QueryWrapper<KbAuthorizedUser> query1 = new QueryWrapper<>();
query.eq("a.user_id",bean.getUserId());
one = authorizedUserMapper.getOne(query1);
}
/**是否是所有节点的管理员*/ /**是否是所有节点的管理员*/
List<KbAuthuserKnowledgeprojectMap> list1 = authuserKnowledgeprojectMapService.list(Wrappers.<KbAuthuserKnowledgeprojectMap>lambdaQuery() List<KbAuthuserKnowledgeprojectMap> list1 = authuserKnowledgeprojectMapService.list(Wrappers.<KbAuthuserKnowledgeprojectMap>lambdaQuery()
.eq(KbAuthuserKnowledgeprojectMap::getAuthUserId, one.getId()) .eq(KbAuthuserKnowledgeprojectMap::getAuthUserId, one.getId())
......
...@@ -9,11 +9,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -9,11 +9,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zzsn.knowbase.entity.*; import com.zzsn.knowbase.entity.*;
import com.zzsn.knowbase.mapper.KbAuthorizedUserMapper;
import com.zzsn.knowbase.mapper.KbKnowledgeProjectMapper; import com.zzsn.knowbase.mapper.KbKnowledgeProjectMapper;
import com.zzsn.knowbase.mapper.KbUserRoleMapMapper; import com.zzsn.knowbase.mapper.KbUserRoleMapMapper;
import com.zzsn.knowbase.service.*; import com.zzsn.knowbase.service.*;
import com.zzsn.knowbase.util.SpringContextUtils; import com.zzsn.knowbase.util.SpringContextUtils;
import com.zzsn.knowbase.vo.Result; import com.zzsn.knowbase.vo.Result;
import com.zzsn.knowbase.vo.UserKnowPermissionVo;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -54,6 +56,8 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec ...@@ -54,6 +56,8 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec
KbPermissionsService permissionsService; KbPermissionsService permissionsService;
@Autowired @Autowired
KbRoleService roleService; KbRoleService roleService;
@Autowired
KbAuthorizedUserMapper authorizedUserMapper;
@Override @Override
@Transactional @Transactional
public Result<?> add(KbKnowledgeProject knowledgeProject) { public Result<?> add(KbKnowledgeProject knowledgeProject) {
...@@ -147,6 +151,9 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec ...@@ -147,6 +151,9 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec
} }
} }
super.updateBatchById(list); super.updateBatchById(list);
}else {
knowledgeProject.setUpdateTime(new Date());
super.updateById(knowledgeProject);
} }
return Result.OK(); return Result.OK();
...@@ -169,7 +176,7 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec ...@@ -169,7 +176,7 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec
if (0 == userInfo.getIsAll()) { if (0 == userInfo.getIsAll()) {
List<KbKnowledgeProject> kbKnowledgeProjects ; List<KbKnowledgeProject> kbKnowledgeProjects ;
if ("1".equals(sign)&&StringUtils.isBlank(projectId)){ if ("1".equals(sign)&&"0".equals(projectId)){
kbKnowledgeProjects = super.list(Wrappers.<KbKnowledgeProject>lambdaQuery() kbKnowledgeProjects = super.list(Wrappers.<KbKnowledgeProject>lambdaQuery()
.eq(KbKnowledgeProject::getPid, KbKnowledgeProjectService.ROOT_PID_VALUE) .eq(KbKnowledgeProject::getPid, KbKnowledgeProjectService.ROOT_PID_VALUE)
.eq(StrUtil.isNotBlank(category),KbKnowledgeProject::getCategory,category)); .eq(StrUtil.isNotBlank(category),KbKnowledgeProject::getCategory,category));
...@@ -179,13 +186,50 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec ...@@ -179,13 +186,50 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec
.eq(StrUtil.isNotBlank(category),KbKnowledgeProject::getCategory,category)); .eq(StrUtil.isNotBlank(category),KbKnowledgeProject::getCategory,category));
} }
List<KbPermissions> list = permissionsService.list(Wrappers.<KbPermissions>lambdaQuery().in(KbPermissions::getPermissionCode,Arrays.asList("p_look","p_edit","p_del")));
List<KbRole> rManager = roleService.list(Wrappers.<KbRole>lambdaQuery().eq(KbRole::getRoleCode, "r_manager")); List<KbRole> list = roleService.list(Wrappers.<KbRole>lambdaQuery().eq(KbRole::getId, userInfo.getRoleId()));
List<KbRolePermissionMap> permissionMaps = rolePermissionMapService.list(Wrappers.<KbRolePermissionMap>lambdaQuery().in(KbRolePermissionMap::getRoleId, list.stream().map(KbRole::getId).collect(Collectors.toList())));
List<KbPermissions> permissions = permissionsService.list(Wrappers.<KbPermissions>lambdaQuery().in(KbPermissions::getId, permissionMaps.stream().map(KbRolePermissionMap::getPermissionId).collect(Collectors.toList())));
kbKnowledgeProjects.forEach(e -> { kbKnowledgeProjects.forEach(e -> {
e.setPermissions(list); e.setRoles(list);
e.setRoles(rManager); e.setPermissions(permissions);
}); });
//查询此用户,在其他节点有无特殊权限
List<UserKnowPermissionVo> res = authorizedUserMapper.getUserPermission(userInfo.getId());
List<UserKnowPermissionVo> collect = res.stream().filter(f -> !"0".equals(f.getKnowledgeProjectId())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(collect)){
//其他节点有额外权限
kbKnowledgeProjects.forEach(e -> {
List<UserKnowPermissionVo> collect1 = collect.stream().filter(f -> f.getKnowledgeProjectId().equals(e.getId())).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(collect1)){
Map<String, List<UserKnowPermissionVo>> collect2 = collect1.stream().collect(Collectors.groupingBy(UserKnowPermissionVo::getRoleId));
List<KbRole> roles = new ArrayList<>();
List<KbPermissions> permissionsList = new ArrayList<>();
collect2.forEach((key,v)->{
KbRole kbRole = new KbRole();
kbRole.setRoleCode(v.get(0).getRoleCode());
kbRole.setRoleName(v.get(0).getRoleName());
kbRole.setId(key);
roles.add(kbRole);
v.forEach(p -> {
KbPermissions kbPermission = new KbPermissions();
kbPermission.setId(p.getPermissionId());
kbPermission.setPermissionCode(p.getPermissionCode());
kbPermission.setPermissionName(p.getPermissionName());
permissionsList.add(kbPermission);
});
});
e.setRoles(roles);
e.setPermissions(permissionsList);
}
});
}
return Result.OK(kbKnowledgeProjects); return Result.OK(kbKnowledgeProjects);
}else { }else {
List<KbKnowledgeProject> kbKnowledgeProjects ; List<KbKnowledgeProject> kbKnowledgeProjects ;
String userId = userInfo.getId(); String userId = userInfo.getId();
......
package com.zzsn.knowbase.vo;
import lombok.Data;
/**
* Description:
*
* @author: EDY
* @since: 2024/1/16
*/
@Data
public class UserKnowPermissionVo {
private String userId;
private String knowledgeProjectId;
private String roleId;
private String roleCode;
private String roleName;
private String permissionCode;
private String permissionName;
private String permissionId;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论