Browse Source

修改角色关联菜单

master
WendyYang 1 year ago
parent
commit
05fd14df64
3 changed files with 37 additions and 18 deletions
  1. +13
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/sys/service/IUserRoleService.java
  2. +11
    -16
      pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/RoleServiceImpl.java
  3. +13
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/UserRoleServiceImpl.java

+ 13
- 0
pmapi/src/main/java/com/ningdatech/pmapi/sys/service/IUserRoleService.java View File

@@ -3,6 +3,8 @@ package com.ningdatech.pmapi.sys.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ningdatech.pmapi.sys.model.entity.UserRole; import com.ningdatech.pmapi.sys.model.entity.UserRole;


import java.util.List;

/** /**
* <p> * <p>
* 业务接口 * 业务接口
@@ -20,4 +22,15 @@ public interface IUserRoleService extends IService<UserRole> {
* @return 是否正确 * @return 是否正确
*/ */
boolean initAdmin(Long userId); boolean initAdmin(Long userId);

/**
* 查询角色关联的用户ID
*
* @param roleId 角色ID
* @return 用户ID集合
* @author WendyYang
**/
List<Long> listUserIdByRoleId(Long roleId);


} }

+ 11
- 16
pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/RoleServiceImpl.java View File

@@ -12,10 +12,10 @@ import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.exception.code.ExceptionCode; import com.ningdatech.basic.exception.code.ExceptionCode;
import com.ningdatech.basic.util.CollUtils; import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.cache.repository.CachePlusOps; import com.ningdatech.cache.repository.CachePlusOps;
import com.ningdatech.pmapi.sys.mapper.RoleMapper;
import com.ningdatech.pmapi.sys.model.dto.MenuDataScopeDTO; import com.ningdatech.pmapi.sys.model.dto.MenuDataScopeDTO;
import com.ningdatech.pmapi.sys.model.dto.RoleSaveDTO; import com.ningdatech.pmapi.sys.model.dto.RoleSaveDTO;
import com.ningdatech.pmapi.sys.model.dto.RoleUpdateDTO; import com.ningdatech.pmapi.sys.model.dto.RoleUpdateDTO;
import com.ningdatech.pmapi.sys.mapper.RoleMapper;
import com.ningdatech.pmapi.sys.model.entity.*; import com.ningdatech.pmapi.sys.model.entity.*;
import com.ningdatech.pmapi.sys.service.*; import com.ningdatech.pmapi.sys.service.*;
import com.ningdatech.pmapi.sys.utils.AuthCacheKeyUtils; import com.ningdatech.pmapi.sys.utils.AuthCacheKeyUtils;
@@ -40,18 +40,12 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService { public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {


private final IUserRoleService IUserRoleService;
private final IUserRoleService userRoleService;
private final RoleMapper roleMapper; private final RoleMapper roleMapper;
private final IRoleMenuDatascopeService roleMenuDatascopeService; private final IRoleMenuDatascopeService roleMenuDatascopeService;

private final CachePlusOps cachePlusOps; private final CachePlusOps cachePlusOps;

private final IRoleMenuService roleMenuService; private final IRoleMenuService roleMenuService;

private final IMenuService IMenuService;

private static final String SUPER_ADMIN = "SUPER_ADMIN";

private final IMenuService menuService;


/** /**
* 删除角色时,需要级联删除跟角色相关的一切资源: * 删除角色时,需要级联删除跟角色相关的一切资源:
@@ -68,7 +62,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
return true; return true;
} }


if (IUserRoleService.count(Wrappers.lambdaQuery(UserRole.class).select(UserRole::getUserId)
if (userRoleService.count(Wrappers.lambdaQuery(UserRole.class).select(UserRole::getUserId)
.in(UserRole::getRoleId, ids)) > 0) { .in(UserRole::getRoleId, ids)) > 0) {
throw new BizException(ExceptionCode.OPERATION_EX.getCode(), "该角色下还有用户 不能随意删除!"); throw new BizException(ExceptionCode.OPERATION_EX.getCode(), "该角色下还有用户 不能随意删除!");
} }
@@ -77,7 +71,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
boolean removeFlag = removeByIds(ids); boolean removeFlag = removeByIds(ids);


//角色拥有的用户 //角色拥有的用户
IUserRoleService.remove(Wrappers.lambdaQuery(UserRole.class).in(UserRole::getRoleId, ids));
userRoleService.remove(Wrappers.lambdaQuery(UserRole.class).in(UserRole::getRoleId, ids));
if (removeFlag) { if (removeFlag) {
// 角色绑定了那些用户 // 角色绑定了那些用户
if (roleMenuService.remove(Wrappers.lambdaQuery(RoleMenu.class).in(RoleMenu::getRoleId, ids))) { if (roleMenuService.remove(Wrappers.lambdaQuery(RoleMenu.class).in(RoleMenu::getRoleId, ids))) {
@@ -149,18 +143,19 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
public void updateRole(RoleUpdateDTO data, Long userId) { public void updateRole(RoleUpdateDTO data, Long userId) {
Role roleOld = roleMapper.selectById(data.getId()); Role roleOld = roleMapper.selectById(data.getId());
if (Objects.isNull(roleOld)) { if (Objects.isNull(roleOld)) {
throw new BaseUncheckedException(HttpStatus.HTTP_OK, String.format("修改用户%d 为空", data.getId()));
throw BizException.wrap("修改用户 %d 为空", data.getId());
} }


if (StrUtil.isNotBlank(data.getName()) && check(data.getName(), roleOld.getId())) { if (StrUtil.isNotBlank(data.getName()) && check(data.getName(), roleOld.getId())) {
throw BizException.wrap("角色名{} 已经存在", data.getName());
throw BizException.wrap("角色名 %s 已经存在", data.getName());
} }
Role role = BeanUtil.toBean(data, Role.class); Role role = BeanUtil.toBean(data, Role.class);
role.setUpdateBy(userId); role.setUpdateBy(userId);
updateById(role); updateById(role);
saveRoleMenu(data.getMenuIds(), role.getId()); saveRoleMenu(data.getMenuIds(), role.getId());
saveRoleMenuDatascope(data.getMenuDataScopeList(), role.getId()); saveRoleMenuDatascope(data.getMenuDataScopeList(), role.getId());
cachePlusOps.del(AuthCacheKeyUtils.userResourceCacheKey(userId));
List<Long> userIdList = userRoleService.listUserIdByRoleId(role.getId());
userIdList.forEach(w -> cachePlusOps.del(AuthCacheKeyUtils.userResourceCacheKey(w)));
} }


@Override @Override
@@ -184,7 +179,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
roleMenuService.remove(Wrappers.lambdaQuery(RoleMenu.class).eq(RoleMenu::getRoleId, roleId)); roleMenuService.remove(Wrappers.lambdaQuery(RoleMenu.class).eq(RoleMenu::getRoleId, roleId));
Set<RoleMenu> toAddMenus = new HashSet<>(); Set<RoleMenu> toAddMenus = new HashSet<>();
for (Long menuId : menuIds) { for (Long menuId : menuIds) {
Menu menu = IMenuService.getById(menuId);
Menu menu = menuService.getById(menuId);
if (Objects.isNull(menu)) { if (Objects.isNull(menu)) {
continue; continue;
} }
@@ -203,7 +198,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
if (Objects.isNull(menu.getPid()) || menu.getPid().equals(0L)) { if (Objects.isNull(menu.getPid()) || menu.getPid().equals(0L)) {
return; return;
} }
Menu parent = IMenuService.getById(menu.getPid());
Menu parent = menuService.getById(menu.getPid());
if (Objects.isNull(parent)) { if (Objects.isNull(parent)) {
return; return;
} }


+ 13
- 2
pmapi/src/main/java/com/ningdatech/pmapi/sys/service/impl/UserRoleServiceImpl.java View File

@@ -4,16 +4,19 @@ import cn.hutool.http.HttpStatus;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ningdatech.basic.exception.BaseUncheckedException; import com.ningdatech.basic.exception.BaseUncheckedException;
import com.ningdatech.pmapi.sys.model.entity.Role;
import com.ningdatech.pmapi.sys.model.entity.UserRole;
import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.sys.mapper.RoleMapper; import com.ningdatech.pmapi.sys.mapper.RoleMapper;
import com.ningdatech.pmapi.sys.mapper.UserRoleMapper; import com.ningdatech.pmapi.sys.mapper.UserRoleMapper;
import com.ningdatech.pmapi.sys.model.entity.Role;
import com.ningdatech.pmapi.sys.model.entity.UserRole;
import com.ningdatech.pmapi.sys.service.IUserRoleService; import com.ningdatech.pmapi.sys.service.IUserRoleService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;


import java.util.List;

/** /**
* <p> * <p>
* 业务实现类 * 业务实现类
@@ -46,4 +49,12 @@ public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> i


return super.save(userRole); return super.save(userRole);
} }

@Override
public List<Long> listUserIdByRoleId(Long roleId) {
List<UserRole> userRoles = this.list(Wrappers.<UserRole>lambdaQuery()
.eq(UserRole::getRoleId, roleId));
return CollUtils.fieldList(userRoles, UserRole::getUserId);
}

} }

Loading…
Cancel
Save