mirror of
https://github.com/dataease/dataease.git
synced 2026-05-21 04:08:10 +08:00
feat: 角色管理完善
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package io.dataease.base.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@@ -42,4 +44,30 @@ public class SysMenu implements Serializable {
|
||||
private Long updateTime;
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
||||
/**
|
||||
* 由于该类型作为HashSet key所以必须重写以下方法
|
||||
* @param o
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
SysMenu menu = (SysMenu) o;
|
||||
return Objects.equals(menuId, menu.menuId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(menuId);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -5,10 +5,15 @@ import io.dataease.controller.sys.response.RoleNodeResponse;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public interface ExtSysRoleMapper {
|
||||
|
||||
|
||||
List<RoleNodeResponse> query(@Param("request")RoleGridRequest request);
|
||||
|
||||
int deleteRoleMenu(@Param("roleId") Long roleId);
|
||||
|
||||
int batchInsertRoleMenu(@Param("maps") List<Map<String, Long>> maps);
|
||||
}
|
||||
|
||||
@@ -23,4 +23,16 @@
|
||||
</select>
|
||||
|
||||
|
||||
<delete id="deleteRoleMenu">
|
||||
delete from sys_roles_menus where role_id = #{roleId}
|
||||
</delete>
|
||||
|
||||
<insert id="batchInsertRoleMenu">
|
||||
insert into sys_roles_menus (role_id, menu_id) values
|
||||
<foreach collection="maps" item="map" separator=",">
|
||||
(#{map.roleId},#{map.menuId})
|
||||
</foreach>
|
||||
</insert>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -14,6 +14,7 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@RestController
|
||||
@@ -29,15 +30,11 @@ public class SysMenuController {
|
||||
@PostMapping("/childNodes/{pid}")
|
||||
public List<MenuNodeResponse> childNodes(@PathVariable("pid") Long pid){
|
||||
List<SysMenu> nodes = menuService.nodesByPid(pid);
|
||||
List<MenuNodeResponse> nodeResponses = nodes.stream().map(node -> {
|
||||
MenuNodeResponse menuNodeResponse = BeanUtils.copyBean(new MenuNodeResponse(), node);
|
||||
menuNodeResponse.setHasChildren(node.getSubCount() > 0);
|
||||
menuNodeResponse.setTop(node.getPid() == menuService.MENU_ROOT_PID);
|
||||
return menuNodeResponse;
|
||||
}).collect(Collectors.toList());
|
||||
return nodeResponses;
|
||||
return menuService.convert(nodes);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ApiOperation("新增菜单")
|
||||
@PostMapping("/create")
|
||||
public void create(@RequestBody MenuCreateRequest request){
|
||||
@@ -49,6 +46,7 @@ public class SysMenuController {
|
||||
public void delete(@RequestBody MenuDeleteRequest request){
|
||||
menuService.delete(request);
|
||||
}
|
||||
|
||||
@ApiOperation("更新菜单")
|
||||
@PostMapping("/update")
|
||||
public void update(@RequestBody MenuCreateRequest menu){
|
||||
@@ -56,4 +54,14 @@ public class SysMenuController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@PostMapping("/childMenus/{pid}")
|
||||
public Set<Long> childMenus(@PathVariable Long pid){
|
||||
List<MenuNodeResponse> childs = menuService.childs(pid);
|
||||
Set<Long> sets = childs.stream().map(MenuNodeResponse::getMenuId).collect(Collectors.toSet());
|
||||
sets.add(pid);
|
||||
return sets;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import io.dataease.base.domain.SysRole;
|
||||
import io.dataease.commons.utils.PageUtils;
|
||||
import io.dataease.commons.utils.Pager;
|
||||
import io.dataease.controller.sys.request.RoleGridRequest;
|
||||
import io.dataease.controller.sys.request.RoleMenusRequest;
|
||||
import io.dataease.controller.sys.response.RoleNodeResponse;
|
||||
import io.dataease.service.sys.SysRoleService;
|
||||
import io.swagger.annotations.Api;
|
||||
@@ -34,8 +35,8 @@ public class SysRoleController {
|
||||
|
||||
|
||||
@ApiOperation("删除角色")
|
||||
@PostMapping("/delete")
|
||||
public void delete(Long roleId){
|
||||
@PostMapping("/delete/{roleId}")
|
||||
public void delete(@PathVariable("roleId") Long roleId){
|
||||
sysRoleService.delete(roleId);
|
||||
}
|
||||
|
||||
@@ -52,4 +53,10 @@ public class SysRoleController {
|
||||
Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
|
||||
return PageUtils.setPageInfo(page, sysRoleService.query(request));
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/saveRolesMenus")
|
||||
public void saveRolesMenus(@RequestBody RoleMenusRequest request){
|
||||
sysRoleService.batchSaveRolesMenus(request);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package io.dataease.controller.sys.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class RoleMenusRequest {
|
||||
|
||||
private Long roleId;
|
||||
|
||||
private List<Long> menuIds;
|
||||
}
|
||||
@@ -7,11 +7,16 @@ import io.dataease.base.mapper.ext.ExtMenuMapper;
|
||||
import io.dataease.commons.utils.BeanUtils;
|
||||
import io.dataease.controller.sys.request.MenuCreateRequest;
|
||||
import io.dataease.controller.sys.request.MenuDeleteRequest;
|
||||
import io.dataease.controller.sys.response.MenuNodeResponse;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class MenuService {
|
||||
@@ -108,5 +113,32 @@ public class MenuService {
|
||||
return sysMenuMapper.updateByPrimaryKeySelective(sysMenu);
|
||||
}
|
||||
|
||||
public List<MenuNodeResponse> childs(Long pid){
|
||||
Set<SysMenu> childs = getChilds(nodesByPid(pid), new HashSet());
|
||||
List<SysMenu> menus = childs.stream().collect(Collectors.toList());
|
||||
List<MenuNodeResponse> responses = convert(menus);
|
||||
return responses;
|
||||
}
|
||||
|
||||
private Set<SysMenu> getChilds(List<SysMenu> lists, Set<SysMenu> sets){
|
||||
lists.forEach(menu -> {
|
||||
sets.add(menu);
|
||||
List<SysMenu> kidMenus = nodesByPid(menu.getMenuId());
|
||||
if (CollectionUtils.isNotEmpty(kidMenus)){
|
||||
getChilds(kidMenus, sets);
|
||||
}
|
||||
});
|
||||
return sets;
|
||||
}
|
||||
|
||||
public List<MenuNodeResponse> convert(List<SysMenu> menus){
|
||||
return menus.stream().map(node -> {
|
||||
MenuNodeResponse menuNodeResponse = BeanUtils.copyBean(new MenuNodeResponse(), node);
|
||||
menuNodeResponse.setHasChildren(node.getSubCount() > 0);
|
||||
menuNodeResponse.setTop(node.getPid() == MENU_ROOT_PID);
|
||||
return menuNodeResponse;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -5,11 +5,16 @@ import io.dataease.base.domain.SysRole;
|
||||
import io.dataease.base.mapper.SysRoleMapper;
|
||||
import io.dataease.base.mapper.ext.ExtSysRoleMapper;
|
||||
import io.dataease.controller.sys.request.RoleGridRequest;
|
||||
import io.dataease.controller.sys.request.RoleMenusRequest;
|
||||
import io.dataease.controller.sys.response.RoleNodeResponse;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class SysRoleService {
|
||||
@@ -45,4 +50,19 @@ public class SysRoleService {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public int batchSaveRolesMenus(RoleMenusRequest request){
|
||||
extSysRoleMapper.deleteRoleMenu(request.getRoleId());
|
||||
List<Map<String, Long>> maps = request.getMenuIds().stream().map(menuId -> {
|
||||
Map<String, Long> map = new HashMap<>();
|
||||
map.put("roleId", request.getRoleId());
|
||||
map.put("menuId", menuId);
|
||||
return map;
|
||||
}).collect(Collectors.toList());
|
||||
return extSysRoleMapper.batchInsertRoleMenu(maps);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user