parent
4e38bf75ca
commit
4e5b6ff2cf
@ -0,0 +1,28 @@
|
||||
package cn.iocoder.mall.system.biz.event.authorization;
|
||||
|
||||
import cn.iocoder.mall.system.biz.dataobject.authorization.RoleDO;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
/**
|
||||
* {@link RoleDO} 删除事件
|
||||
*/
|
||||
public class RoleDeleteEvent extends ApplicationEvent {
|
||||
/**
|
||||
* 角色编号
|
||||
*/
|
||||
private Integer id;
|
||||
|
||||
public RoleDeleteEvent(Object source) {
|
||||
super(source);
|
||||
}
|
||||
|
||||
public RoleDeleteEvent(Object source, Integer id) {
|
||||
super(source);
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,113 @@
|
||||
package cn.iocoder.mall.system.rest.controller.authorization;
|
||||
|
||||
import cn.iocoder.common.framework.constant.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);
|
||||
}
|
||||
|
||||
// @GetMapping("/role_tree")
|
||||
// @ApiOperation(value = "获得角色拥有的菜单权限", notes = "以树结构返回")
|
||||
// @ApiImplicitParam(name = "id", value = "角色编号", required = true, example = "1")
|
||||
// public CommonResult<List<RoleRoleTreeNodeVO>> roleTree(@RequestParam("id") Integer id) {
|
||||
// // 芋艿:此处,严格来说可以在校验下角色是否存在。不过呢,校验了也没啥意义,因为一般不存在这个情况,且不会有业务上的影响。并且,反倒多了一次 rpc 调用。
|
||||
// // 第一步,获得角色拥有的资源数组
|
||||
// Set<Integer> roleRoles = roleService.getRolesByTypeAndRoleIds(null, CollectionUtil.asSet(id))
|
||||
// .stream().map(RoleBO::getId).collect(Collectors.toSet());
|
||||
// // 第二步,获得资源树
|
||||
// List<RoleBO> allRoles = roleService.getRolesByType(null);
|
||||
// // 创建 AdminMenuTreeNodeVO Map
|
||||
// Map<Integer, RoleRoleTreeNodeVO> treeNodeMap = allRoles.stream().collect(Collectors.toMap(RoleBO::getId, RoleConvert.INSTANCE::convert4));
|
||||
// // 处理父子关系
|
||||
// treeNodeMap.values().stream()
|
||||
// .filter(node -> !node.getPid().equals(RoleConstants.PID_ROOT))
|
||||
// .forEach((childNode) -> {
|
||||
// // 获得父节点
|
||||
// RoleRoleTreeNodeVO parentNode = treeNodeMap.get(childNode.getPid());
|
||||
// if (parentNode.getChildren() == null) { // 初始化 children 数组
|
||||
// parentNode.setChildren(new ArrayList<>());
|
||||
// }
|
||||
// // 将自己添加到父节点中
|
||||
// parentNode.getChildren().add(childNode);
|
||||
// });
|
||||
// // 获得到所有的根节点
|
||||
// List<RoleRoleTreeNodeVO> rootNodes = treeNodeMap.values().stream()
|
||||
// .filter(node -> node.getPid().equals(RoleConstants.PID_ROOT))
|
||||
// .sorted(Comparator.comparing(RoleRoleTreeNodeVO::getSort))
|
||||
// .collect(Collectors.toList());
|
||||
// // 第三步,设置角色是否有该角色
|
||||
// treeNodeMap.values().forEach(nodeVO -> nodeVO.setAssigned(roleRoles.contains(nodeVO.getId())));
|
||||
// // 返回结果
|
||||
// return success(rootNodes);
|
||||
// }
|
||||
//
|
||||
// @PostMapping("/assign_role")
|
||||
// @ApiOperation(value = "分配角色资源")
|
||||
// public CommonResult<Boolean> assignRole(RoleAssignRoleDTO roleAssignRoleDTO) {
|
||||
// return success(roleService.assignRoleRole(AdminSecurityContextHolder.getContext().getAdminId(), roleAssignRoleDTO));
|
||||
// }
|
||||
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package cn.iocoder.mall.system.rest.convert.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.RolePageDTO;
|
||||
import cn.iocoder.mall.system.biz.dto.authorization.RoleUpdateDTO;
|
||||
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 org.mapstruct.Mapper;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface AdminsRoleConvert {
|
||||
|
||||
AdminsRoleConvert INSTANCE = Mappers.getMapper(AdminsRoleConvert.class);
|
||||
|
||||
RoleAddDTO convert(AdminsRoleAddRequest bean);
|
||||
|
||||
RoleUpdateDTO convert(AdminsRoleUpdateRequest bean);
|
||||
|
||||
RolePageDTO convert(AdminsRolePageRequest bean);
|
||||
|
||||
PageResult<AdminsRolePageResponse> convertPage(PageResult<RoleBO> bean);
|
||||
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package cn.iocoder.mall.system.rest.request.authorization;
|
||||
|
||||
import cn.iocoder.common.framework.vo.PageParam;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@ApiModel("管理员 - 角色模块 - 分页列表 Request")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
public class AdminsRolePageRequest extends PageParam {
|
||||
|
||||
@ApiModelProperty( value = "角色名,模糊匹配", example = "系统管理员")
|
||||
private String name;
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package cn.iocoder.mall.system.rest.request.authorization;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
@ApiModel("管理员 - 角色模块 - 修改角色 Request")
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class AdminsRoleUpdateRequest {
|
||||
|
||||
@ApiModelProperty(value = "角色编号", required = true, example = "1")
|
||||
@NotNull(message = "角色编号不能为空")
|
||||
private Integer id;
|
||||
|
||||
@ApiModelProperty(value = "角色名字", required = true, example = "系统管理员")
|
||||
@NotEmpty(message = "角色名字不能为空")
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "角色编码", example = "SUPER_ADMIN")
|
||||
private String code;
|
||||
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
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)
|
||||
private Date createTime;
|
||||
|
||||
}
|
||||
@ -1,107 +0,0 @@
|
||||
package cn.iocoder.mall.system.application.controller.admins;
|
||||
|
||||
import cn.iocoder.common.framework.util.CollectionUtil;
|
||||
import cn.iocoder.common.framework.vo.CommonResult;
|
||||
import cn.iocoder.common.framework.vo.PageResult;
|
||||
import cn.iocoder.mall.system.api.ResourceService;
|
||||
import cn.iocoder.mall.system.api.RoleService;
|
||||
import cn.iocoder.mall.system.api.bo.resource.ResourceBO;
|
||||
import cn.iocoder.mall.system.api.bo.role.RoleBO;
|
||||
import cn.iocoder.mall.system.api.constant.ResourceConstants;
|
||||
import cn.iocoder.mall.system.api.dto.role.RoleAddDTO;
|
||||
import cn.iocoder.mall.system.api.dto.role.RoleAssignResourceDTO;
|
||||
import cn.iocoder.mall.system.api.dto.role.RolePageDTO;
|
||||
import cn.iocoder.mall.system.api.dto.role.RoleUpdateDTO;
|
||||
import cn.iocoder.mall.system.application.convert.ResourceConvert;
|
||||
import cn.iocoder.mall.system.application.vo.role.RoleResourceTreeNodeVO;
|
||||
import cn.iocoder.mall.system.sdk.context.AdminSecurityContextHolder;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.dubbo.config.annotation.Reference;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static cn.iocoder.common.framework.vo.CommonResult.success;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("admins/role")
|
||||
@Api("角色模块")
|
||||
public class RoleController {
|
||||
|
||||
@Reference(validation = "true", version = "${dubbo.provider.RoleService.version}")
|
||||
private RoleService roleService;
|
||||
|
||||
@Reference(validation = "true", version = "${dubbo.provider.ResourceService.version}")
|
||||
private ResourceService resourceService;
|
||||
|
||||
@GetMapping("/page")
|
||||
@ApiOperation(value = "角色分页")
|
||||
public CommonResult<PageResult<RoleBO>> page(RolePageDTO rolePageDTO) {
|
||||
return success(roleService.getRolePage(rolePageDTO));
|
||||
}
|
||||
|
||||
@PostMapping("/add")
|
||||
@ApiOperation(value = "创建角色")
|
||||
public CommonResult<RoleBO> add(RoleAddDTO roleAddDTO) {
|
||||
return success(roleService.addRole(AdminSecurityContextHolder.getContext().getAdminId(), roleAddDTO));
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
@ApiOperation(value = "更新角色")
|
||||
public CommonResult<Boolean> update(RoleUpdateDTO roleUpdateDTO) {
|
||||
return success(roleService.updateRole(AdminSecurityContextHolder.getContext().getAdminId(), roleUpdateDTO));
|
||||
}
|
||||
|
||||
@PostMapping("/delete")
|
||||
@ApiOperation(value = "删除角色")
|
||||
@ApiImplicitParam(name = "id", value = "角色编号", required = true, example = "1")
|
||||
public CommonResult<Boolean> delete(@RequestParam("id") Integer id) {
|
||||
return success(roleService.deleteRole(AdminSecurityContextHolder.getContext().getAdminId(), id));
|
||||
}
|
||||
|
||||
@SuppressWarnings("Duplicates")
|
||||
@GetMapping("/resource_tree")
|
||||
@ApiOperation(value = "获得角色拥有的菜单权限", notes = "以树结构返回")
|
||||
@ApiImplicitParam(name = "id", value = "角色编号", required = true, example = "1")
|
||||
public CommonResult<List<RoleResourceTreeNodeVO>> resourceTree(@RequestParam("id") Integer id) {
|
||||
// 芋艿:此处,严格来说可以在校验下角色是否存在。不过呢,校验了也没啥意义,因为一般不存在这个情况,且不会有业务上的影响。并且,反倒多了一次 rpc 调用。
|
||||
// 第一步,获得角色拥有的资源数组
|
||||
Set<Integer> roleResources = resourceService.getResourcesByTypeAndRoleIds(null, CollectionUtil.asSet(id))
|
||||
.stream().map(ResourceBO::getId).collect(Collectors.toSet());
|
||||
// 第二步,获得资源树
|
||||
List<ResourceBO> allResources = resourceService.getResourcesByType(null);
|
||||
// 创建 AdminMenuTreeNodeVO Map
|
||||
Map<Integer, RoleResourceTreeNodeVO> treeNodeMap = allResources.stream().collect(Collectors.toMap(ResourceBO::getId, ResourceConvert.INSTANCE::convert4));
|
||||
// 处理父子关系
|
||||
treeNodeMap.values().stream()
|
||||
.filter(node -> !node.getPid().equals(ResourceConstants.PID_ROOT))
|
||||
.forEach((childNode) -> {
|
||||
// 获得父节点
|
||||
RoleResourceTreeNodeVO parentNode = treeNodeMap.get(childNode.getPid());
|
||||
if (parentNode.getChildren() == null) { // 初始化 children 数组
|
||||
parentNode.setChildren(new ArrayList<>());
|
||||
}
|
||||
// 将自己添加到父节点中
|
||||
parentNode.getChildren().add(childNode);
|
||||
});
|
||||
// 获得到所有的根节点
|
||||
List<RoleResourceTreeNodeVO> rootNodes = treeNodeMap.values().stream()
|
||||
.filter(node -> node.getPid().equals(ResourceConstants.PID_ROOT))
|
||||
.sorted(Comparator.comparing(RoleResourceTreeNodeVO::getSort))
|
||||
.collect(Collectors.toList());
|
||||
// 第三步,设置角色是否有该角色
|
||||
treeNodeMap.values().forEach(nodeVO -> nodeVO.setAssigned(roleResources.contains(nodeVO.getId())));
|
||||
// 返回结果
|
||||
return success(rootNodes);
|
||||
}
|
||||
|
||||
@PostMapping("/assign_resource")
|
||||
@ApiOperation(value = "分配角色资源")
|
||||
public CommonResult<Boolean> assignResource(RoleAssignResourceDTO roleAssignResourceDTO) {
|
||||
return success(roleService.assignRoleResource(AdminSecurityContextHolder.getContext().getAdminId(), roleAssignResourceDTO));
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in new issue