package vip.fuck.sm.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; import cn.hutool.core.util.StrUtil; import vip.fuck.sm.common.aop.annotation.LogAnnotation; import vip.fuck.sm.common.exception.BusinessException; import vip.fuck.sm.common.exception.code.BaseResponseCode; import vip.fuck.sm.common.utils.AssertUtil; import vip.fuck.sm.entity.SysPermission; import vip.fuck.sm.service.PermissionService; import vip.fuck.sm.vo.resp.PermissionRespNode; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.noear.solon.annotation.*; import org.noear.solon.validation.annotation.Valid; import org.noear.solon.validation.annotation.Validated; import java.util.List; /** * 菜单权限管理 * * @author xian.zi.ming@qq.com fuck.vip * @version V1.0 * @date 2020年3月18日 */ @Mapping("/sys") @Controller @Api(tags = "组织模块-菜单权限管理") @Valid public class PermissionController { @Inject private PermissionService permissionService; @Post @Mapping ("/permission") @ApiOperation(value = "新增菜单权限接口") @LogAnnotation(title = "菜单权限管理", action = "新增菜单权限") @SaCheckPermission("sys:permission:add") public void addPermission( @Validated SysPermission vo) { verifyFormPid(vo); permissionService.save(vo); } @Delete @Mapping ("/permission/{id}") @ApiOperation(value = "删除菜单权限接口") @LogAnnotation(title = "菜单权限管理", action = "删除菜单权限") @SaCheckPermission("sys:permission:deleted") public void deleted(@Path("id") String id) { permissionService.deleted(id); } @Put @Mapping ("/permission") @ApiOperation(value = "更新菜单权限接口") @LogAnnotation(title = "菜单权限管理", action = "更新菜单权限") @SaCheckPermission("sys:permission:update") public void updatePermission( @Validated SysPermission vo) { AssertUtil.isStringNotBlank(vo.getId(), "id不能为空"); SysPermission sysPermission = permissionService.getById(vo.getId()); if (null == sysPermission) { throw new BusinessException(BaseResponseCode.DATA_ERROR); } // 只有类型变更或者所属菜单变更 if (sysPermission.getType().equals(vo.getType()) || !sysPermission.getPid().equals(vo.getPid())) { verifyFormPid(vo); } permissionService.updatePermission(vo); } @Get @Mapping ("/permission/{id}") @ApiOperation(value = "查询菜单权限接口") @LogAnnotation(title = "菜单权限管理", action = "查询菜单权限") @SaCheckPermission("sys:permission:detail") public SysPermission detailInfo(@Path("id") String id) { return permissionService.getById(id); } @Get @Mapping ("/permissions") @ApiOperation(value = "获取所有菜单权限接口") @LogAnnotation(title = "菜单权限管理", action = "获取所有菜单权限") @SaCheckPermission("sys:permission:list") public List getAllMenusPermission() { return permissionService.selectAll(null); } @Get @Mapping ("/permission/tree") @ApiOperation(value = "获取所有目录菜单树接口") @LogAnnotation(title = "菜单权限管理", action = "获取所有目录菜单树") @SaCheckPermission(value = {"sys:permission:update", "sys:permission:add"}, mode = SaMode.OR) public List getAllMenusPermissionTree( String permissionId) { return permissionService.selectAllMenuByTree(permissionId); } @Get @Mapping ("/permission/tree/all") @ApiOperation(value = "获取所有目录菜单树接口") @LogAnnotation(title = "菜单权限管理", action = "获取所有目录菜单树") @SaCheckPermission(value = {"sys:role:update", "sys:role:add"}, mode = SaMode.OR) public List getAllPermissionTree() { return permissionService.selectAllByTree(1); } /** * 操作后的菜单类型是目录的时候 父级必须为目录 * 操作后的菜单类型是菜单的时候,父类必须为目录类型 * 操作后的菜单类型是按钮的时候 父类必须为菜单类型 */ private void verifyFormPid(SysPermission sysPermission) { SysPermission parent; parent = permissionService.getById(sysPermission.getPid()); switch (sysPermission.getType()) { case 1: if (parent != null) { if (parent.getType() != 1) { throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_CATALOG_ERROR); } } else if (!"0".equals(sysPermission.getPid())) { throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_CATALOG_ERROR); } break; case 2: if (parent == null || parent.getType() != 1) { throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_MENU_ERROR); } if (StrUtil.isEmpty(sysPermission.getUrl())) { throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_URL_NOT_NULL); } break; case 3: if (parent == null || parent.getType() != 2) { throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_BTN_ERROR); } if (StrUtil.isEmpty(sysPermission.getPerms())) { throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_URL_PERMS_NULL); } if (StrUtil.isEmpty(sysPermission.getUrl())) { throw new BusinessException(BaseResponseCode.OPERATION_MENU_PERMISSION_URL_NOT_NULL); } break; default: } } }