完成角色的授权的功能

This commit is contained in:
YunaiV
2021-01-09 18:53:43 +08:00
parent ad1d1978d2
commit 2651f9bce3
16 changed files with 343 additions and 164 deletions

View File

@@ -2,7 +2,6 @@ package cn.iocoder.dashboard.modules.system.service.permission;
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuCreateReqVO;
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuListReqVO;
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuRespVO;
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuUpdateReqVO;
import cn.iocoder.dashboard.modules.system.dal.mysql.dataobject.permission.SysMenuDO;
@@ -21,13 +20,20 @@ public interface SysMenuService {
*/
void init();
/**
* 获得所有菜单列表
*
* @return 菜单列表
*/
List<SysMenuDO> listMenus();
/**
* 筛选菜单列表
*
* @param reqVO 筛选条件请求 VO
* @return 菜单列表
*/
List<SysMenuRespVO> listMenus(SysMenuListReqVO reqVO);
List<SysMenuDO> listMenus(SysMenuListReqVO reqVO);
/**
* 获得所有菜单,从缓存中

View File

@@ -43,6 +43,22 @@ public interface SysPermissionService {
*/
Set<Long> listUserRoleIds(Long userId, @Nullable Collection<Integer> roleStatuses);
/**
* 获得角色拥有的菜单编号集合
*
* @param roleId 角色编号
* @return 菜单编号集合
*/
Set<Long> listRoleMenuIds(Long roleId);
/**
* 赋予赋予角色菜单
*
* @param roleId 角色编号
* @param menuIds 菜单编号集合
*/
void assignRoleMenu(Long roleId, Set<Long> menuIds);
/**
* 处理角色删除时,删除关联授权角色
*

View File

@@ -3,7 +3,6 @@ package cn.iocoder.dashboard.modules.system.service.permission.impl;
import cn.iocoder.dashboard.common.exception.util.ServiceExceptionUtil;
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuCreateReqVO;
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuListReqVO;
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuRespVO;
import cn.iocoder.dashboard.modules.system.controller.permission.vo.menu.SysMenuUpdateReqVO;
import cn.iocoder.dashboard.modules.system.convert.permission.SysMenuConvert;
import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysMenuMapper;
@@ -78,10 +77,13 @@ public class SysMenuServiceImpl implements SysMenuService {
}
@Override
public List<SysMenuRespVO> listMenus(SysMenuListReqVO reqVO) {
List<SysMenuDO> list = menuMapper.selectList(reqVO);
// TODO 排序
return SysMenuConvert.INSTANCE.convertList(list);
public List<SysMenuDO> listMenus() {
return menuMapper.selectList();
}
@Override
public List<SysMenuDO> listMenus(SysMenuListReqVO reqVO) {
return menuMapper.selectList(reqVO);
}
@Override

View File

@@ -1,5 +1,6 @@
package cn.iocoder.dashboard.modules.system.service.permission.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysRoleMenuMapper;
import cn.iocoder.dashboard.modules.system.dal.mysql.dao.permission.SysUserRoleMapper;
@@ -16,6 +17,7 @@ import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
@@ -110,6 +112,36 @@ public class SysPermissionServiceImpl implements SysPermissionService {
return CollectionUtils.convertSet(userRoleList, SysUserRoleDO::getRoleId);
}
@Override
public Set<Long> listRoleMenuIds(Long roleId) {
// 如果是管理员的情况下,获取全部菜单编号
SysRoleDO role = roleService.getRole(roleId);
if (roleService.hasAnyAdmin(Collections.singletonList(role))) {
return CollectionUtils.convertSet(menuService.listMenus(), SysMenuDO::getId);
}
// 如果是非管理员的情况下,获得拥有的菜单编号
return CollectionUtils.convertSet(roleMenuMapper.selectListByRoleId(roleId),
SysRoleMenuDO::getMenuId);
}
@Override
@Transactional
public void assignRoleMenu(Long roleId, Set<Long> menuIds) {
// 获得角色拥有菜单编号
Set<Long> dbMenuIds = CollectionUtils.convertSet(roleMenuMapper.selectListByRoleId(roleId),
SysRoleMenuDO::getMenuId);
// 计算新增和删除的菜单编号
Collection<Long> createMenuIds = CollUtil.subtract(menuIds, dbMenuIds);
Collection<Long> deleteMenuIds = CollUtil.subtract(dbMenuIds, menuIds);
// 执行新增和删除。对于已经授权的菜单,不用做任何处理
if (!CollectionUtil.isEmpty(createMenuIds)) {
roleMenuMapper.insertList(roleId, createMenuIds);
}
if (!CollectionUtil.isEmpty(deleteMenuIds)) {
roleMenuMapper.deleteListByRoleIdAndMenuIds(roleId, deleteMenuIds);
}
}
@Override
public void processRoleDeleted(Long roleId) {
// TODO 实现我

View File

@@ -18,6 +18,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.google.common.collect.ImmutableMap;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.PostConstruct;
@@ -115,6 +116,7 @@ public class SysRoleServiceImpl implements SysRoleService {
}
@Override
@Transactional
public void deleteRole(Long id) {
// 校验是否可以更新
this.checkUpdateRole(id);
@@ -129,7 +131,6 @@ public class SysRoleServiceImpl implements SysRoleService {
return roleMapper.selectById(id);
}
@Override
public PageResult<SysRoleDO> pageRole(SysRolePageReqVO reqVO) {
IPage<SysRoleDO> roleDOPage = roleMapper.selectPage(reqVO);