提交 9b3bd9bc 作者: zhenjie

角色权限配置

上级 decdd6a4
package com.mmc.iuav.user.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @author: zj
* @Date: 2023/7/11 14:25
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "菜单DTO")
public class MenuInfoDTO implements Serializable {
private static final long serialVersionUID = -4144480758801282377L;
private Integer id;
@ApiModelProperty(value = "上级ID")
private Integer pid;
@ApiModelProperty(value = "菜单名称")
private String menuName;
@ApiModelProperty(value = "元素类型:0菜单 1按钮")
private String domType;
@ApiModelProperty(value = "路由地址")
private String pathInfo;
@ApiModelProperty(value = "图标")
private String icon;
@ApiModelProperty(value = "下级菜单列表")
private List<MenuInfoDTO> children;
}
package com.mmc.iuav.user.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
/**
* @author: zj
* @Date: 2023/7/11 14:04
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RoleMenuInfoVO implements Serializable {
private static final long serialVersionUID = -8669403169556374845L;
@ApiModelProperty(value = "角色id")
@NotNull
private Integer roleId;
@ApiModelProperty(value = "菜单ids")
@NotNull
@Size(min = 1, message = "角色菜单需选择1个以上")
private List<Integer> menuInfoIds;
}
package com.mmc.iuav.user.controller;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.MenuInfoDTO;
import com.mmc.iuav.user.model.vo.RoleMenuInfoVO;
import com.mmc.iuav.user.service.MenuInfoService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author: zj
* @Date: 2023/7/11 14:09
*/
@Api(tags = "角色菜单管理")
@RequestMapping("/role-menu/")
@RestController
public class MenuInfoController extends BaseController {
@Autowired
private MenuInfoService menuInfoService;
@ApiOperation(value = "全部菜单列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = MenuInfoDTO.class)})
@GetMapping("listMenuInfo")
public ResultBody listMenuInfo() {
return menuInfoService.listMenuInfo();
}
@ApiOperation(value = "根据角色id获取权限")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = MenuInfoDTO.class)})
@GetMapping("listRoleMenuInfo")
public ResultBody listRoleMenuInfo(@RequestParam Integer roleId) {
return menuInfoService.listRoleMenuInfo(roleId);
}
@ApiOperation(value = "修改角色菜单权限")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("updateRoleMenuInfo")
public ResultBody updateRoleMenuInfo(HttpServletRequest request, @RequestBody RoleMenuInfoVO roleMenuInfoVO) {
return menuInfoService.updateRoleMenuInfo(roleMenuInfoVO, this.getUserLoginInfoFromRedis(request));
}
}
package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.MenuInfoDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author: zj
* @Date: 2023/7/11 14:11
*/
@Mapper
public interface MenuInfoDao {
List<MenuInfoDO> listMenuInfo();
List<MenuInfoDO> listRoleMenuInfo(Integer roleId);
void batchAddMenuIds(Integer roleId, @Param("addMenuIds") List<Integer> addMenuIds);
void batchDeleteMenuIds(Integer roleId, @Param("deleteMenuIds") List<Integer> deleteMenuIds);
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.dto.MenuInfoDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/7/11 14:49
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MenuInfoDO implements Serializable {
private static final long serialVersionUID = -4992870152816350664L;
private Integer id;
private Integer pid;
private String menuName;
private String portType;
private String domType;
private String pathInfo;
private String icon;
private Integer sort;
private Date createTime;
private Date updateTime;
public MenuInfoDTO buildMenuInfoDTO() {
return MenuInfoDTO.builder().id(this.id).pid(this.pid).menuName(this.menuName).domType(this.domType)
.pathInfo(this.pathInfo).icon(this.icon).build();
}
}
package com.mmc.iuav.user.service;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.vo.RoleMenuInfoVO;
/**
* @author: zj
* @Date: 2023/7/11 14:13
*/
public interface MenuInfoService {
ResultBody updateRoleMenuInfo(RoleMenuInfoVO roleMenuInfoVO, LoginSuccessDTO userLoginInfoFromRedis);
ResultBody listMenuInfo();
ResultBody listRoleMenuInfo(Integer roleId);
}
package com.mmc.iuav.user.service.impl;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.dao.MenuInfoDao;
import com.mmc.iuav.user.dao.RoleDao;
import com.mmc.iuav.user.entity.MenuInfoDO;
import com.mmc.iuav.user.entity.RoleInfoDO;
import com.mmc.iuav.user.model.dto.LoginSuccessDTO;
import com.mmc.iuav.user.model.dto.MenuInfoDTO;
import com.mmc.iuav.user.model.vo.RoleMenuInfoVO;
import com.mmc.iuav.user.service.MenuInfoService;
import com.mmc.iuav.user.util.MenuTreeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: zj
* @Date: 2023/7/11 14:14
*/
@Service
public class MenuInfoServiceImpl implements MenuInfoService {
@Autowired
private MenuInfoDao menuInfoDao;
@Autowired
private RoleDao roleDao;
@Transactional
@Override
public ResultBody updateRoleMenuInfo(RoleMenuInfoVO roleMenuInfoVO, LoginSuccessDTO loginSuccessDTO) {
// 判断该角色的菜单是否可以修改
RoleInfoDO roleInfo = roleDao.getRoleInfo(roleMenuInfoVO.getRoleId());
if (!CollectionUtils.isEmpty(roleMenuInfoVO.getMenuInfoIds())) {
List<MenuInfoDO> menuInfoDOList = menuInfoDao.listRoleMenuInfo(roleMenuInfoVO.getRoleId());
List<Integer> existMenuIds = menuInfoDOList.stream().map(MenuInfoDO::getId).collect(Collectors.toList());
// 新添加的权限
List<Integer> addMenuIds = roleMenuInfoVO.getMenuInfoIds().stream().filter(v -> !existMenuIds.contains(v)).collect(Collectors.toList());
// 需删除的权限
List<Integer> deleteMenuIds = existMenuIds.stream().filter(v -> !roleMenuInfoVO.getMenuInfoIds().contains(v)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(addMenuIds)) {
menuInfoDao.batchAddMenuIds(roleMenuInfoVO.getRoleId(), addMenuIds);
}
if (!CollectionUtils.isEmpty(deleteMenuIds)) {
menuInfoDao.batchDeleteMenuIds(roleMenuInfoVO.getRoleId(), deleteMenuIds);
}
}
return ResultBody.success();
}
@Override
public ResultBody listMenuInfo() {
List<MenuInfoDO> menuInfoDOList = menuInfoDao.listMenuInfo();
List<MenuInfoDTO> menuInfoDTOS = menuInfoDOList.stream().map(MenuInfoDO::buildMenuInfoDTO).collect(Collectors.toList());
return ResultBody.success(MenuTreeUtil.buildTreePCMenu(menuInfoDTOS));
}
@Override
public ResultBody listRoleMenuInfo(Integer roleId) {
List<MenuInfoDO> menuInfoDOList = menuInfoDao.listRoleMenuInfo(roleId);
List<MenuInfoDTO> menuInfoDTOS = menuInfoDOList.stream().map(MenuInfoDO::buildMenuInfoDTO).collect(Collectors.toList());
return ResultBody.success(MenuTreeUtil.buildTreePCMenu(menuInfoDTOS));
}
}
package com.mmc.iuav.user.util;
import com.mmc.iuav.user.model.dto.MenuInfoDTO;
import java.util.ArrayList;
import java.util.List;
/**
* @author zj
*/
public class MenuTreeUtil {
public final static Integer SXTB_PC_MENU_PID = 1;
public final static String SXTB_PC_MENU_NAME = "云享飞管理后台";
public static void builderTree(List<MenuInfoDTO> treeEntityList, MenuInfoDTO pTreeEntity) {
List<MenuInfoDTO> childMenus = new ArrayList<MenuInfoDTO>();
for (MenuInfoDTO menuInfo : treeEntityList) {
// int的对比范围有限所以需要使用equals
if ((menuInfo.getPid().toString()).equals(pTreeEntity.getId().toString())) {
childMenus.add(menuInfo);
}
}
if (childMenus.size() > 0) {
pTreeEntity.setChildren(childMenus);
} else {
return;
}
for (MenuInfoDTO children : childMenus) {
treeEntityList.remove(children);
}
if (treeEntityList.size() > 0) {
for (MenuInfoDTO children : childMenus) {
builderTree(treeEntityList, children);
}
}
}
/**
* 获取云享飞管理后台菜单列表
*
* @return
*/
public static MenuInfoDTO buildTreePCMenu(List<MenuInfoDTO> treeEntityList) {
MenuInfoDTO parent = new MenuInfoDTO();
parent.setId(MenuTreeUtil.SXTB_PC_MENU_PID);
parent.setMenuName(SXTB_PC_MENU_NAME);
MenuTreeUtil.builderTree(treeEntityList, parent);
return parent;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.iuav.user.dao.MenuInfoDao">
<resultMap id="menuInfoResultMap" type="com.mmc.iuav.user.entity.MenuInfoDO">
<id property="id" column="id"/>
<result property="pid" column="pid"/>
<result property="menuName" column="menu_name"/>
<result property="portType" column="port_type"/>
<result property="domType" column="dom_type"/>
<result property="pathInfo" column="path_info"/>
<result property="icon" column="icon"/>
<result property="sort" column="sort"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<insert id="batchAddMenuIds">
insert into menu_role_rel
(
role_id,menu_id,create_time
)
values
<foreach collection="addMenuIds" item="menuId" separator=",">
(
#{roleId},#{menuId},NOW()
)
</foreach>
</insert>
<delete id="batchDeleteMenuIds">
delete from menu_role_rel where role_id = #{roleId} and menu_id in
<foreach collection="deleteMenuIds" item="menuId" open="(" separator=","
close=")">
#{menuId}
</foreach>
</delete>
<select id="listMenuInfo" resultType="com.mmc.iuav.user.entity.MenuInfoDO">
select m.id,m.pid,m.menu_name,m.dom_type,m.path_info
from menu_info m
order by m.sort ASC
</select>
<select id="listRoleMenuInfo" resultType="com.mmc.iuav.user.entity.MenuInfoDO">
select m.id,m.pid,m.menu_name,m.dom_type,m.path_info
from menu_info m
inner join menu_role_rel mr on mr.menu_id=m.id
where mr.role_id = #{roleId}
order by m.sort ASC
</select>
</mapper>
\ No newline at end of file
...@@ -103,10 +103,6 @@ ...@@ -103,10 +103,6 @@
select r.id, select r.id,
r.role_no, r.role_no,
r.role_name, r.role_name,
r.is_operate,
r.is_admin,
r.is_system,
r.role_status,
r.remark, r.remark,
r.create_time r.create_time
from role_info r from role_info r
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论