Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
71550a3c
提交
71550a3c
authored
2月 01, 2023
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
完善 MenuServiceImplTest 单元测试
上级
eadad755
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
35 行增加
和
33 行删除
+35
-33
MenuController.java
...le/system/controller/admin/permission/MenuController.java
+4
-7
MenuDO.java
...yudao/module/system/dal/dataobject/permission/MenuDO.java
+6
-1
MenuService.java
...r/yudao/module/system/service/permission/MenuService.java
+3
-3
MenuServiceImpl.java
...dao/module/system/service/permission/MenuServiceImpl.java
+18
-18
PermissionServiceImpl.java
...dule/system/service/permission/PermissionServiceImpl.java
+1
-1
TenantServiceImpl.java
...yudao/module/system/service/tenant/TenantServiceImpl.java
+1
-1
MenuServiceImplTest.java
...module/system/service/permission/MenuServiceImplTest.java
+0
-0
PermissionServiceTest.java
...dule/system/service/permission/PermissionServiceTest.java
+1
-1
TenantServiceImplTest.java
...o/module/system/service/tenant/TenantServiceImplTest.java
+1
-1
没有找到文件。
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java
浏览文件 @
71550a3c
...
...
@@ -6,7 +6,6 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.*;
import
cn.iocoder.yudao.module.system.convert.permission.MenuConvert
;
import
cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO
;
import
cn.iocoder.yudao.module.system.service.permission.MenuService
;
import
cn.iocoder.yudao.module.system.service.tenant.TenantService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiOperation
;
...
...
@@ -29,8 +28,6 @@ public class MenuController {
@Resource
private
MenuService
menuService
;
@Resource
private
TenantService
tenantService
;
@PostMapping
(
"/create"
)
@ApiOperation
(
"创建菜单"
)
...
...
@@ -60,8 +57,8 @@ public class MenuController {
@GetMapping
(
"/list"
)
@ApiOperation
(
value
=
"获取菜单列表"
,
notes
=
"用于【菜单管理】界面"
)
@PreAuthorize
(
"@ss.hasPermission('system:menu:query')"
)
public
CommonResult
<
List
<
MenuRespVO
>>
getMenu
s
(
MenuListReqVO
reqVO
)
{
List
<
MenuDO
>
list
=
menuService
.
getMenu
s
(
reqVO
);
public
CommonResult
<
List
<
MenuRespVO
>>
getMenu
List
(
MenuListReqVO
reqVO
)
{
List
<
MenuDO
>
list
=
menuService
.
getMenu
List
(
reqVO
);
list
.
sort
(
Comparator
.
comparing
(
MenuDO:
:
getSort
));
return
success
(
MenuConvert
.
INSTANCE
.
convertList
(
list
));
}
...
...
@@ -69,11 +66,11 @@ public class MenuController {
@GetMapping
(
"/list-all-simple"
)
@ApiOperation
(
value
=
"获取菜单精简信息列表"
,
notes
=
"只包含被开启的菜单,用于【角色分配菜单】功能的选项。"
+
"在多租户的场景下,会只返回租户所在套餐有的菜单"
)
public
CommonResult
<
List
<
MenuSimpleRespVO
>>
getSimpleMenu
s
()
{
public
CommonResult
<
List
<
MenuSimpleRespVO
>>
getSimpleMenu
List
()
{
// 获得菜单列表,只要开启状态的
MenuListReqVO
reqVO
=
new
MenuListReqVO
();
reqVO
.
setStatus
(
CommonStatusEnum
.
ENABLE
.
getStatus
());
List
<
MenuDO
>
list
=
menuService
.
get
TenantMenus
(
reqVO
);
List
<
MenuDO
>
list
=
menuService
.
get
MenuListByTenant
(
reqVO
);
// 排序后,返回给前端
list
.
sort
(
Comparator
.
comparing
(
MenuDO:
:
getSort
));
return
success
(
MenuConvert
.
INSTANCE
.
convertList02
(
list
));
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java
浏览文件 @
71550a3c
...
...
@@ -21,7 +21,12 @@ import lombok.EqualsAndHashCode;
public
class
MenuDO
extends
BaseDO
{
/**
* 菜单ID
* 菜单编号 - 根节点
*/
public
static
final
Long
ID_ROOT
=
0L
;
/**
* 菜单编号
*/
@TableId
private
Long
id
;
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuService.java
浏览文件 @
71550a3c
...
...
@@ -47,7 +47,7 @@ public interface MenuService {
*
* @return 菜单列表
*/
List
<
MenuDO
>
getMenu
s
();
List
<
MenuDO
>
getMenu
List
();
/**
* 基于租户,筛选菜单列表
...
...
@@ -56,7 +56,7 @@ public interface MenuService {
* @param reqVO 筛选条件请求 VO
* @return 菜单列表
*/
List
<
MenuDO
>
get
TenantMenus
(
MenuListReqVO
reqVO
);
List
<
MenuDO
>
get
MenuListByTenant
(
MenuListReqVO
reqVO
);
/**
* 筛选菜单列表
...
...
@@ -64,7 +64,7 @@ public interface MenuService {
* @param reqVO 筛选条件请求 VO
* @return 菜单列表
*/
List
<
MenuDO
>
getMenu
s
(
MenuListReqVO
reqVO
);
List
<
MenuDO
>
getMenu
List
(
MenuListReqVO
reqVO
);
/**
* 获得所有菜单,从缓存中
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java
浏览文件 @
71550a3c
...
...
@@ -10,7 +10,6 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuUp
import
cn.iocoder.yudao.module.system.convert.permission.MenuConvert
;
import
cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO
;
import
cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper
;
import
cn.iocoder.yudao.module.system.enums.permission.MenuIdEnum
;
import
cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum
;
import
cn.iocoder.yudao.module.system.mq.producer.permission.MenuProducer
;
import
cn.iocoder.yudao.module.system.service.tenant.TenantService
;
...
...
@@ -19,6 +18,7 @@ import com.google.common.collect.ImmutableMap;
import
com.google.common.collect.ImmutableMultimap
;
import
com.google.common.collect.Multimap
;
import
lombok.Getter
;
import
lombok.Setter
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.context.annotation.Lazy
;
import
org.springframework.stereotype.Service
;
...
...
@@ -31,6 +31,7 @@ import javax.annotation.Resource;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
static
cn
.
iocoder
.
yudao
.
module
.
system
.
dal
.
dataobject
.
permission
.
MenuDO
.
ID_ROOT
;
import
static
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
ErrorCodeConstants
.*;
/**
...
...
@@ -49,6 +50,7 @@ public class MenuServiceImpl implements MenuService {
* 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
*/
@Getter
@Setter
private
volatile
Map
<
Long
,
MenuDO
>
menuCache
;
/**
* 权限与菜单缓存
...
...
@@ -58,6 +60,7 @@ public class MenuServiceImpl implements MenuService {
* 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向
*/
@Getter
@Setter
private
volatile
Multimap
<
String
,
MenuDO
>
permissionMenuCache
;
@Resource
...
...
@@ -97,9 +100,10 @@ public class MenuServiceImpl implements MenuService {
@Override
public
Long
createMenu
(
MenuCreateReqVO
reqVO
)
{
// 校验父菜单存在
checkParentResource
(
reqVO
.
getParentId
(),
null
);
validateParentMenu
(
reqVO
.
getParentId
(),
null
);
// 校验菜单(自己)
checkResource
(
reqVO
.
getParentId
(),
reqVO
.
getName
(),
null
);
validateMenu
(
reqVO
.
getParentId
(),
reqVO
.
getName
(),
null
);
// 插入数据库
MenuDO
menu
=
MenuConvert
.
INSTANCE
.
convert
(
reqVO
);
initMenuProperty
(
menu
);
...
...
@@ -117,9 +121,10 @@ public class MenuServiceImpl implements MenuService {
throw
ServiceExceptionUtil
.
exception
(
MENU_NOT_EXISTS
);
}
// 校验父菜单存在
checkParentResource
(
reqVO
.
getParentId
(),
reqVO
.
getId
());
validateParentMenu
(
reqVO
.
getParentId
(),
reqVO
.
getId
());
// 校验菜单(自己)
checkResource
(
reqVO
.
getParentId
(),
reqVO
.
getName
(),
reqVO
.
getId
());
validateMenu
(
reqVO
.
getParentId
(),
reqVO
.
getName
(),
reqVO
.
getId
());
// 更新到数据库
MenuDO
updateObject
=
MenuConvert
.
INSTANCE
.
convert
(
reqVO
);
initMenuProperty
(
updateObject
);
...
...
@@ -128,13 +133,8 @@ public class MenuServiceImpl implements MenuService {
menuProducer
.
sendMenuRefreshMessage
();
}
/**
* 删除菜单
*
* @param menuId 菜单编号
*/
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
deleteMenu
(
Long
menuId
)
{
// 校验是否还有子菜单
if
(
menuMapper
.
selectCountByParentId
(
menuId
)
>
0
)
{
...
...
@@ -160,20 +160,20 @@ public class MenuServiceImpl implements MenuService {
}
@Override
public
List
<
MenuDO
>
getMenu
s
()
{
public
List
<
MenuDO
>
getMenu
List
()
{
return
menuMapper
.
selectList
();
}
@Override
public
List
<
MenuDO
>
get
TenantMenus
(
MenuListReqVO
reqVO
)
{
List
<
MenuDO
>
menus
=
getMenu
s
(
reqVO
);
public
List
<
MenuDO
>
get
MenuListByTenant
(
MenuListReqVO
reqVO
)
{
List
<
MenuDO
>
menus
=
getMenu
List
(
reqVO
);
// 开启多租户的情况下,需要过滤掉未开通的菜单
tenantService
.
handleTenantMenu
(
menuIds
->
menus
.
removeIf
(
menu
->
!
CollUtil
.
contains
(
menuIds
,
menu
.
getId
())));
return
menus
;
}
@Override
public
List
<
MenuDO
>
getMenu
s
(
MenuListReqVO
reqVO
)
{
public
List
<
MenuDO
>
getMenu
List
(
MenuListReqVO
reqVO
)
{
return
menuMapper
.
selectList
(
reqVO
);
}
...
...
@@ -223,8 +223,8 @@ public class MenuServiceImpl implements MenuService {
* @param childId 当前菜单编号
*/
@VisibleForTesting
public
void
checkParentResource
(
Long
parentId
,
Long
childId
)
{
if
(
parentId
==
null
||
MenuIdEnum
.
ROOT
.
getId
()
.
equals
(
parentId
))
{
void
validateParentMenu
(
Long
parentId
,
Long
childId
)
{
if
(
parentId
==
null
||
ID_ROOT
.
equals
(
parentId
))
{
return
;
}
// 不能设置自己为父菜单
...
...
@@ -253,7 +253,7 @@ public class MenuServiceImpl implements MenuService {
* @param id 菜单编号
*/
@VisibleForTesting
public
void
checkResource
(
Long
parentId
,
String
name
,
Long
id
)
{
void
validateMenu
(
Long
parentId
,
String
name
,
Long
id
)
{
MenuDO
menu
=
menuMapper
.
selectByParentIdAndName
(
parentId
,
name
);
if
(
menu
==
null
)
{
return
;
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceImpl.java
浏览文件 @
71550a3c
...
...
@@ -190,7 +190,7 @@ public class PermissionServiceImpl implements PermissionService {
public
Set
<
Long
>
getRoleMenuIds
(
Long
roleId
)
{
// 如果是管理员的情况下,获取全部菜单编号
if
(
roleService
.
hasAnySuperAdmin
(
Collections
.
singleton
(
roleId
)))
{
return
convertSet
(
menuService
.
getMenu
s
(),
MenuDO:
:
getId
);
return
convertSet
(
menuService
.
getMenu
List
(),
MenuDO:
:
getId
);
}
// 如果是非管理员的情况下,获得拥有的菜单编号
return
convertSet
(
roleMenuMapper
.
selectListByRoleId
(
roleId
),
RoleMenuDO:
:
getMenuId
);
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java
浏览文件 @
71550a3c
...
...
@@ -250,7 +250,7 @@ public class TenantServiceImpl implements TenantService {
TenantDO
tenant
=
getTenant
(
TenantContextHolder
.
getRequiredTenantId
());
Set
<
Long
>
menuIds
;
if
(
isSystemTenant
(
tenant
))
{
// 系统租户,菜单是全量的
menuIds
=
CollectionUtils
.
convertSet
(
menuService
.
getMenu
s
(),
MenuDO:
:
getId
);
menuIds
=
CollectionUtils
.
convertSet
(
menuService
.
getMenu
List
(),
MenuDO:
:
getId
);
}
else
{
menuIds
=
tenantPackageService
.
getTenantPackage
(
tenant
.
getPackageId
()).
getMenuIds
();
}
...
...
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceTest.java
→
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/permission/MenuService
Impl
Test.java
浏览文件 @
71550a3c
差异被折叠。
点击展开。
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/permission/PermissionServiceTest.java
浏览文件 @
71550a3c
...
...
@@ -163,7 +163,7 @@ public class PermissionServiceTest extends BaseDbUnitTest {
// mock 方法
when
(
roleService
.
hasAnySuperAdmin
(
eq
(
singleton
(
100L
)))).
thenReturn
(
true
);
List
<
MenuDO
>
menuList
=
singletonList
(
randomPojo
(
MenuDO
.
class
).
setId
(
1L
));
when
(
menuService
.
getMenu
s
()).
thenReturn
(
menuList
);
when
(
menuService
.
getMenu
List
()).
thenReturn
(
menuList
);
// 调用
Set
<
Long
>
menuIds
=
permissionService
.
getRoleMenuIds
(
roleId
);
...
...
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImplTest.java
浏览文件 @
71550a3c
...
...
@@ -453,7 +453,7 @@ public class TenantServiceImplTest extends BaseDbUnitTest {
tenantMapper
.
insert
(
dbTenant
);
// @Sql: 先插入出一条存在的数据
TenantContextHolder
.
setTenantId
(
dbTenant
.
getId
());
// mock 菜单
when
(
menuService
.
getMenu
s
()).
thenReturn
(
Arrays
.
asList
(
randomPojo
(
MenuDO
.
class
,
o
->
o
.
setId
(
100L
)),
when
(
menuService
.
getMenu
List
()).
thenReturn
(
Arrays
.
asList
(
randomPojo
(
MenuDO
.
class
,
o
->
o
.
setId
(
100L
)),
randomPojo
(
MenuDO
.
class
,
o
->
o
.
setId
(
101L
))));
// 调用
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论