【7.2.5】【menu】增加角色绑定菜单的接口

pull/37/head
fengshuonan 2022-09-29 10:35:27 +08:00
parent 8e1c230f45
commit 5bd415155a
6 changed files with 90 additions and 1 deletions

View File

@ -24,6 +24,7 @@
*/
package cn.stylefeng.roses.kernel.system.api;
import cn.stylefeng.roses.kernel.system.api.enums.AntdvFrontTypeEnum;
import cn.stylefeng.roses.kernel.system.api.pojo.login.v3.IndexMenuInfo;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse;
import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest;
@ -116,4 +117,13 @@ public interface MenuServiceApi {
*/
List<MenuAndButtonTreeResponse> getRoleBindOperateList(SysRoleRequest sysRoleRequest);
/**
* id
*
* @param antdvFrontTypeEnum
* @author fengshuonan
* @date 2022/9/29 9:56
*/
List<Long> getTotalMenuIdList(AntdvFrontTypeEnum antdvFrontTypeEnum);
}

View File

@ -51,7 +51,7 @@ public class SysRoleRequest extends BaseRequest {
*
*/
@NotNull(message = "roleId不能为空", groups = {edit.class, delete.class, detail.class, updateStatus.class, grantResource.class, grantResourceV2.class, grantDataScope.class,
grantMenuButton.class, grantMenu.class, grantButton.class, grantMenusAndButtons.class, roleBindMenuList.class, grantRoleMenus.class})
grantMenuButton.class, grantMenu.class, grantButton.class, grantMenusAndButtons.class, roleBindMenuList.class, grantRoleMenus.class, grantAll.class})
@ChineseDescription("主键")
private Long roleId;
@ -187,6 +187,13 @@ public class SysRoleRequest extends BaseRequest {
@ChineseDescription("资源的业务类型1-业务类型2-系统类型")
private Integer resourceBizType;
/**
* true-false-
*/
@ChineseDescription("全选标识true-全选false-取消全选")
@NotNull(message = "全选标识不能为空", groups = {grantAll.class})
private Boolean totalSelectFlag;
/**
*
*/
@ -248,4 +255,10 @@ public class SysRoleRequest extends BaseRequest {
public @interface grantRoleMenus {
}
/**
*
*/
public @interface grantAll {
}
}

View File

@ -510,6 +510,21 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
return AntdMenusFactory.fillButtonsChecked(menuAndButtonTreeResponses, roleMenuButtonList);
}
@Override
public List<Long> getTotalMenuIdList(AntdvFrontTypeEnum antdvFrontTypeEnum) {
// 查询所有菜单列表,根据前台传递参数,可选择前台还是后台菜单
LambdaQueryWrapper<SysMenu> menuWrapper = new LambdaQueryWrapper<>();
menuWrapper.select(SysMenu::getMenuId);
menuWrapper.eq(SysMenu::getDelFlag, YesOrNotEnum.N.getCode());
menuWrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode());
menuWrapper.nested(i -> i.eq(SysMenu::getAntdvFrontType, antdvFrontTypeEnum.getCode()).or().eq(SysMenu::getAntdvFrontType, AntdvFrontTypeEnum.TOTAL_SHOW.getCode()));
List<SysMenu> sysMenuList = this.list(menuWrapper);
return sysMenuList.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
}
@Override
public List<SysMenu> getCurrentUserMenus(List<String> appCodeList, Boolean layuiVisibleFlag, Integer antdvFrontType) {

View File

@ -263,4 +263,15 @@ public class SysRoleController {
return new SuccessResponseData<>(sysRoleService.grantRoleMenus(sysRoleRequest));
}
/**
*
*
* @author fengshuonan
* @date 2022/9/28 20:28
*/
@PostResource(name = "角色权限界面:角色绑定菜单权限(全选操作)", path = "/sysRole/grantRoleMenus/grantAll")
public ResponseData<List<MenuAndButtonTreeResponse>> grantRoleMenusGrantAll(@RequestBody @Validated(SysRoleRequest.grantAll.class) SysRoleRequest sysRoleRequest) {
return new SuccessResponseData<>(sysRoleService.grantRoleMenusGrantAll(sysRoleRequest));
}
}

View File

@ -176,4 +176,12 @@ public interface SysRoleService extends IService<SysRole>, RoleServiceApi {
*/
List<MenuAndButtonTreeResponse> grantRoleMenus(SysRoleRequest sysRoleRequest);
/**
*
*
* @author fengshuonan
* @date 2022/9/29 9:43
*/
List<MenuAndButtonTreeResponse> grantRoleMenusGrantAll(SysRoleRequest sysRoleRequest);
}

View File

@ -44,6 +44,7 @@ import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict;
import cn.stylefeng.roses.kernel.system.api.MenuServiceApi;
import cn.stylefeng.roses.kernel.system.api.UserServiceApi;
import cn.stylefeng.roses.kernel.system.api.constants.SystemConstants;
import cn.stylefeng.roses.kernel.system.api.enums.AntdvFrontTypeEnum;
import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException;
import cn.stylefeng.roses.kernel.system.api.exception.enums.role.SysRoleExceptionEnum;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse;
@ -62,6 +63,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@ -472,6 +474,36 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
return menuServiceApi.getRoleBindMenuList(sysRoleRequest);
}
@Override
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_UNCOMMITTED)
public List<MenuAndButtonTreeResponse> grantRoleMenusGrantAll(SysRoleRequest sysRoleRequest) {
// 删除角色绑定的所有菜单
LambdaUpdateWrapper<SysRoleMenu> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(SysRoleMenu::getRoleId, sysRoleRequest.getRoleId());
this.roleMenuService.remove(wrapper);
// 如果是全部选中
if (sysRoleRequest.getTotalSelectFlag()) {
// 获取所有前台菜单id
List<Long> totalMenuIdList = this.menuServiceApi.getTotalMenuIdList(AntdvFrontTypeEnum.FRONT);
// 批量保存绑定的菜单集合
List<SysRoleMenu> sysRoleMenus = new ArrayList<>();
for (Long menuId : totalMenuIdList) {
SysRoleMenu item = new SysRoleMenu();
item.setRoleId(sysRoleRequest.getRoleId());
item.setMenuId(menuId);
sysRoleMenus.add(item);
}
this.roleMenuService.saveBatch(sysRoleMenus);
}
// 获取当前角色分配的菜单权限
return menuServiceApi.getRoleBindMenuList(sysRoleRequest);
}
@Override
public List<SysRoleDTO> getRolesByIds(List<Long> roleIds) {
ArrayList<SysRoleDTO> sysRoleResponses = new ArrayList<>();