增加管理员拥有的菜单列表

This commit is contained in:
YunaiV
2020-07-08 20:21:55 +08:00
parent e4d3254869
commit 6bddebafff
28 changed files with 288 additions and 442 deletions

View File

@@ -1,22 +0,0 @@
package cn.iocoder.mall.system.biz.dto.authorization;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
/**
* 授权模块 - 获得账号所拥有的资源树 DTO
*/
@Data
@Accessors(chain = true)
public class AuthorizationGetResourceTreeByAccountIdDTO {
@NotNull(message = "账号编号不能为空")
private Integer accountId;
/**
* 资源类型
*/
private Integer type;
}

View File

@@ -122,18 +122,7 @@ public class AuthorizationServiceImpl implements AuthorizationService {
return Collections.emptyList();
}
Set<Integer> roleIds = CollectionUtil.convertSet(accountRoleDOs, AccountRoleDO::getRoleId);
// 判断是否为超管。若是超管,默认有所有权限
if (roleService.hasSuperAdmin(roleIds)) {
return resourceService.getResourceTree(new ResourceGetTreeDTO().setType(getResourcesByAccountIdDTO.getType()));
}
// 查询角色拥有的资源关联数据
List<RoleResourceDO> roleResourceDOs = roleResourceMapper.selectListByRoleIds(roleIds);
if (CollectionUtil.isEmpty(roleResourceDOs)) {
return Collections.emptyList();
}
Set<Integer> resourceIds = CollectionUtil.convertSet(roleResourceDOs, RoleResourceDO::getResourceId);
// 查询对应资源树
return resourceService.getResourceTree(new ResourceGetTreeDTO().setIds(resourceIds).setType(getResourcesByAccountIdDTO.getType()));
}
@Override

View File

@@ -53,30 +53,7 @@ public class ResourceServiceImpl implements ResourceService {
// 获得对应的资源列表
List<ResourceDO> resourceDOs = resourceMapper.selectListByIdsAndType(getTreeDTO.getIds(), getTreeDTO.getType());
// 拼装成树
// 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。
Map<Integer, ResourceTreeNodeBO> treeNodeMap = new LinkedHashMap<>();
resourceDOs.stream().sorted(Comparator.comparing(ResourceDO::getSort))
.forEach(resourceDO -> treeNodeMap.put(resourceDO.getId(), ResourceConvert.INSTANCE.convertTreeNode(resourceDO)));
// 处理父子关系
treeNodeMap.values().stream()
.filter(node -> !node.getNode().getPid().equals(ResourceIdEnum.ROOT.getId()))
.forEach((childNode) -> {
// 获得父节点
ResourceTreeNodeBO parentNode = treeNodeMap.get(childNode.getNode().getPid());
if (parentNode == null) {
log.error("[getResourceTree][resource({}) 找不到父资源({})]", childNode.getNode().getId(), childNode.getNode().getPid());
return;
}
if (parentNode.getChildren() == null) { // 初始化 children 数组
parentNode.setChildren(new ArrayList<>());
}
// 将自己添加到父节点中
parentNode.getChildren().add(childNode);
});
// 获得到所有的根节点
return treeNodeMap.values().stream()
.filter(node -> node.getNode().getPid().equals(ResourceIdEnum.ROOT.getId()))
.collect(Collectors.toList());
}
}

View File

@@ -1,39 +0,0 @@
package cn.iocoder.mall.system.biz.service.authorization;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.system.biz.bo.authorization.RoleBO;
import cn.iocoder.mall.system.biz.dto.authorization.RoleAddDTO;
import cn.iocoder.mall.system.biz.dto.authorization.RoleDeleteDTO;
import cn.iocoder.mall.system.biz.dto.authorization.RolePageDTO;
import cn.iocoder.mall.system.biz.dto.authorization.RoleUpdateDTO;
import cn.iocoder.mall.system.biz.dto.authorization.RoleGetListDTO;
import java.util.Collection;
import java.util.List;
/**
* 角色模块 - Service 接口
*/
public interface RoleService {
RoleBO getRole(Integer id);
List<RoleBO> getRoleList(RoleGetListDTO getListDTO);
PageResult<RoleBO> getRolePage(RolePageDTO pageDTO);
/**
* 判断指定角色是否包含超级管理员角色
*
* @param ids 角色编号数组
* @return 是否有超级管理员角色
*/
boolean hasSuperAdmin(Collection<Integer> ids);
Integer addRole(RoleAddDTO roleAddDTO);
void updateRole(RoleUpdateDTO roleUpdateDTO);
void deleteRole(RoleDeleteDTO roleDeleteDTO);
}

View File

@@ -1,50 +0,0 @@
package cn.iocoder.mall.system.biz.service.authorization;
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
import cn.iocoder.common.framework.util.StringUtils;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.mybatis.enums.DeletedStatusEnum;
import cn.iocoder.mall.system.biz.bo.authorization.RoleBO;
import cn.iocoder.mall.system.biz.convert.authorization.RoleConvert;
import cn.iocoder.mall.system.biz.dao.authorization.RoleMapper;
import cn.iocoder.mall.system.biz.dataobject.authorization.RoleDO;
import cn.iocoder.mall.system.biz.dto.authorization.*;
import cn.iocoder.mall.system.biz.enums.SystemErrorCodeEnum;
import cn.iocoder.mall.system.biz.enums.authorization.RoleCodeEnum;
import cn.iocoder.mall.system.biz.enums.authorization.RoleTypeEnum;
import cn.iocoder.mall.system.biz.event.authorization.ResourceDeleteEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.Date;
import java.util.List;
@Service
public class RoleServiceImpl implements RoleService {
@Autowired
private ApplicationEventPublisher eventPublisher;
@Autowired
private RoleMapper roleMapper;
@Override
public PageResult<RoleBO> getRolePage(RolePageDTO pageDTO) {
return RoleConvert.INSTANCE.convertPage(roleMapper.selectPage(pageDTO));
}
@Override
public boolean hasSuperAdmin(Collection<Integer> ids) {
List<RoleDO> roleDOs = roleMapper.selectBatchIds(ids);
for (RoleDO roleDO : roleDOs) {
if (RoleCodeEnum.SUPER_ADMIN.getCode().equals(roleDO.getCode())) {
return true;
}
}
return false;
}
}

View File

@@ -22,69 +22,6 @@ import org.springframework.web.bind.annotation.RestController;
@Api(tags = "管理员 - 管理员 API")
public class AdminsAdminController {
@Autowired
private AdminService adminService;
@GetMapping("/page")
@RequiresPermissions("system:admin:page")
@ApiOperation(value = "管理员分页")
public CommonResult<PageResult<AdminsAdminPageResponse>> page(AdminsAdminPageRequest request) {
// 查询管理员分页
AdminPageDTO pageDTO = AdminsAdminConvert.INSTANCE.convert(request);
PageResult<AdminBO> adminPageBO = adminService.getAdminPage(pageDTO);
PageResult<AdminsAdminPageResponse> adminPageResponse = AdminsAdminConvert.INSTANCE.convertPage(adminPageBO);
if (adminPageResponse.getList().isEmpty()) {
return CommonResult.success(adminPageResponse);
}
// 拼接角色数据
// TODO 拼接部门数据
// 拼接结果
// if (!resultPage.getList().isEmpty()) {
// // 查询角色数组
// Map<Integer, Collection<RoleBO>> roleMap = adminService.getAdminRolesMap(CollectionUtil.convertList(resultPage.getList(), AdminBO::getId));
// resultPage.getList().forEach(admin -> admin.setRoles(AdminConvert.INSTANCE.convertAdminVORoleList(roleMap.get(admin.getId()))));
//
// // 查询对应部门
// List<DeptmentBO> deptmentBOS = deptmentService.getAllDeptments();
// Map<Integer, String> deptNameMap = deptmentBOS.stream().collect(Collectors.toMap(d->d.getId(), d->d.getName()));
// //管理员所在部门被删后,变成未分配状态
// deptNameMap.put(0, "未分配");
// resultPage.getList().forEach(admin->{
// admin.setDeptment(new AdminVO.Deptment(admin.getDeptmentId(), deptNameMap.get(admin.getDeptmentId())));
// });
// }
return CommonResult.success(adminPageResponse);
}
// @PostMapping("/add")
// @ApiOperation(value = "创建管理员")
// public CommonResult<AdminBO> add(AdminAddDTO adminAddDTO) {
// return success(adminService.addAdmin(AdminSecurityContextHolder.getContext().getAdminId(), adminAddDTO));
// }
//
// @PostMapping("/update")
// @ApiOperation(value = "更新管理员")
// public CommonResult<Boolean> update(AdminUpdateDTO adminUpdateDTO) {
// return success(adminService.updateAdmin(AdminSecurityContextHolder.getContext().getAdminId(), adminUpdateDTO));
// }
//
// @PostMapping("/update_status")
// @ApiOperation(value = "更新管理员状态")
// public CommonResult<Boolean> updateStatus(AdminUpdateStatusDTO adminUpdateStatusDTO) {
// return success(adminService.updateAdminStatus(AdminSecurityContextHolder.getContext().getAdminId(), adminUpdateStatusDTO));
// }
//
// @PostMapping("/delete")
// @ApiOperation(value = "删除管理员")
// @ApiImplicitParam(name = "id", value = "管理员编号", required = true, example = "1")
// public CommonResult<Boolean> delete(@RequestParam("id") Integer id) {
// return success(adminService.deleteAdmin(AdminSecurityContextHolder.getContext().getAdminId(), id));
// }
//
// @GetMapping("/role_list")
// @ApiOperation(value = "指定管理员拥有的角色列表")
// @ApiImplicitParam(name = "id", value = "管理员编号", required = true, example = "1")
@@ -99,7 +36,7 @@ public class AdminsAdminController {
// result.forEach(adminRoleVO -> adminRoleVO.setAssigned(adminRoleIdSet.contains(adminRoleVO.getId())));
// return success(result);
// }
//
// @PostMapping("/assign_role")
// @ApiOperation(value = "分配给管理员角色")
// public CommonResult<Boolean> assignRole(AdminAssignRoleDTO adminAssignRoleDTO) {

View File

@@ -38,34 +38,4 @@ public class AdminsResourceController {
return CommonResult.success(AdminsResourceConvert.INSTANCE.convertList(resourceTreeNodeBOs));
}
@PostMapping("/add")
@ApiOperation(value = "创建资源", notes = "例如说,菜单资源,按钮资源")
@RequiresPermissions("system:resource:add")
public CommonResult<Integer> add(AdminsResourceAddRequest request) {
ResourceAddDTO addDTO = AdminsResourceConvert.INSTANCE.convert(request)
.setAdminId(AdminSecurityContextHolder.getAdminId());
return CommonResult.success(resourceService.addResource(addDTO));
}
@PostMapping("/update")
@ApiOperation(value = "更新资源")
@RequiresPermissions("system:resource:update")
public CommonResult<Boolean> update(AdminsResourceUpdateRequest request) {
ResourceUpdateDTO updateDTO = AdminsResourceConvert.INSTANCE.convert(request)
.setAdminId(AdminSecurityContextHolder.getAdminId());
resourceService.updateResource(updateDTO);
return CommonResult.success(true);
}
@PostMapping("/delete")
@ApiOperation(value = "删除资源")
@ApiImplicitParam(name = "id", value = "资源编号", required = true, example = "1")
@RequiresPermissions("system:resource:delete")
public CommonResult<Boolean> delete(@RequestParam("id") Integer id) {
ResourceDeleteDTO deleteDTO = new ResourceDeleteDTO().setId(id)
.setAdminId(AdminSecurityContextHolder.getAdminId());
resourceService.deleteResource(deleteDTO);
return CommonResult.success(true);
}
}

View File

@@ -1,75 +0,0 @@
package cn.iocoder.mall.system.rest.controller.authorization;
import cn.iocoder.common.framework.enums.MallConstants;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.security.core.annotation.RequiresPermissions;
import cn.iocoder.mall.security.core.context.AdminSecurityContextHolder;
import cn.iocoder.mall.system.biz.bo.authorization.RoleBO;
import cn.iocoder.mall.system.biz.dto.authorization.RoleAddDTO;
import cn.iocoder.mall.system.biz.dto.authorization.RoleDeleteDTO;
import cn.iocoder.mall.system.biz.dto.authorization.RolePageDTO;
import cn.iocoder.mall.system.biz.dto.authorization.RoleUpdateDTO;
import cn.iocoder.mall.system.biz.service.authorization.RoleService;
import cn.iocoder.mall.system.rest.convert.authorization.AdminsRoleConvert;
import cn.iocoder.mall.system.rest.request.authorization.AdminsRoleAddRequest;
import cn.iocoder.mall.system.rest.request.authorization.AdminsRolePageRequest;
import cn.iocoder.mall.system.rest.request.authorization.AdminsRoleUpdateRequest;
import cn.iocoder.mall.system.rest.response.authorization.AdminsRolePageResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(MallConstants.ROOT_PATH_ADMIN + "/role")
@Api(tags = "管理员 - 角色 API")
public class AdminsRoleController {
@Autowired
private RoleService roleService;
@GetMapping("/page")
@ApiOperation(value = "角色分页")
@RequiresPermissions("system:role:page")
public CommonResult<PageResult<AdminsRolePageResponse>> page(AdminsRolePageRequest request) {
RolePageDTO pageDTO = AdminsRoleConvert.INSTANCE.convert(request);
PageResult<RoleBO> pageResult = roleService.getRolePage(pageDTO);
return CommonResult.success(AdminsRoleConvert.INSTANCE.convertPage(pageResult));
}
@PostMapping("/add")
@ApiOperation(value = "创建角色")
@RequiresPermissions("system:role:add")
public CommonResult<Integer> add(AdminsRoleAddRequest request) {
RoleAddDTO addDTO = AdminsRoleConvert.INSTANCE.convert(request)
.setAdminId(AdminSecurityContextHolder.getAdminId());
return CommonResult.success(roleService.addRole(addDTO));
}
@PostMapping("/update")
@ApiOperation(value = "更新角色")
@RequiresPermissions("system:role:update")
public CommonResult<Boolean> update(AdminsRoleUpdateRequest request) {
RoleUpdateDTO updateDTO = AdminsRoleConvert.INSTANCE.convert(request)
.setAdminId(AdminSecurityContextHolder.getAdminId());
roleService.updateRole(updateDTO);
return CommonResult.success(true);
}
@PostMapping("/delete")
@ApiOperation(value = "删除角色")
@RequiresPermissions("system:role:delete")
@ApiImplicitParam(name = "id", value = "角色编号", required = true, example = "1")
public CommonResult<Boolean> delete(@RequestParam("id") Integer id) {
RoleDeleteDTO deleteDTO = new RoleDeleteDTO().setId(id)
.setAdminId(AdminSecurityContextHolder.getAdminId());
roleService.deleteRole(deleteDTO);
return CommonResult.success(true);
}
}

View File

@@ -1,26 +0,0 @@
package cn.iocoder.mall.system.rest.response.authorization;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
@ApiModel("管理员 - 角色模块 - 分页列表 Response")
@Data
@Accessors(chain = true)
public class AdminsRolePageResponse {
@ApiModelProperty(value = "角色编号", required = true, example = "1")
private Integer id;
@ApiModelProperty(value = "角色名字", required = true, example = "管理员")
private String name;
@ApiModelProperty(value = "角色编码", example = "SUPER_ADMIN")
private String code;
@ApiModelProperty(value = "角色类型", required = true, example = "1-系统角色; 2-内置角色")
private Integer type;
@ApiModelProperty(value = "创建时间", required = true)
private Date createTime;
}

View File

@@ -1,50 +0,0 @@
package cn.iocoder.mall.system.rest.response.user;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
@ApiModel("用户 - OAuth2 模块 - 认证响应")
@Data
@Accessors(chain = true)
public class UsersOAuth2AuthenticateResponse {
@Data
public static class Token {
@ApiModelProperty(value = "access token", required = true, example = "001e8f49b20e47f7b3a2de774497cd50")
private String accessToken;
@ApiModelProperty(value = "refresh token", required = true, example = "001e8f49b20e47f7b3a2de774497cd50")
private String refreshToken;
@ApiModelProperty(value = "过期时间", required = true)
private Date expiresTime;
}
@Data
public static class User {
@ApiModelProperty(value = "管理员编号", required = true, example = "1")
private Integer id;
@ApiModelProperty(value = "昵称", required = true, example = "小王")
private String nickname;
}
/**
* TODO 晚点测试下 swagger 的表现
*/
private User user;
/**
* TODO 晚点测试下 swagger 的表现
*/
private Token token;
}