feat(需求): ①创建/编辑用户菜单权限勾选父菜单自动全选子菜单(el-tree去check-strictly走父子联动,提交前压缩为最小直接授权集,父勾选时后代不重复落库) ②修复管理员勾选店铺数据菜单仍提示'无权查看店铺数据任务'——admin分区授权后若有效授权含店铺数据任务/重复检查菜单(含经'店铺管理'分组展开),自动补内部数据权限 admin_shop_data_crawl_task_data(镜像V84惯例只增不删,回收仍走超管数据范围授权UI)
This commit is contained in:
+43
@@ -509,6 +509,9 @@ public class PermissionMenuService {
|
||||
entity.setColumnId(columnId);
|
||||
userColumnPermissionMapper.insert(entity);
|
||||
}
|
||||
if (MENU_TYPE_ADMIN.equals(normalizedType)) {
|
||||
autoGrantShopDataDataPermission(userId, finalGrantIds, loadMenus(MENU_TYPE_ADMIN));
|
||||
}
|
||||
|
||||
// 目标管理员的权限被回收后,其直接创建的员工若仍持有超出范围的
|
||||
// 授权(创建时快照遗留,员工权限独立于管理员后续变更),必须级联
|
||||
@@ -516,6 +519,46 @@ public class PermissionMenuService {
|
||||
cascadeCleanupSubordinateOverreach(target, finalGrantIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 镜像 V84 惯例(已获「店铺数据任务管理」菜单的用户自动获得初始数据查看授权):
|
||||
* admin 分区授权更新后,若**有效授权**包含店铺数据相关菜单(任务管理/重复检查,
|
||||
* 含经一级分组「店铺管理」展开覆盖的情形),自动补上内部数据权限
|
||||
* admin_shop_data_crawl_task_data,避免普通管理员已勾了菜单仍提示
|
||||
* “无权查看店铺数据任务”。
|
||||
* 只增不删:数据授权的回收仍走超管专用的「数据范围授权」UI。
|
||||
*/
|
||||
private void autoGrantShopDataDataPermission(Long userId, Set<Long> directGrantIds,
|
||||
List<PermissionMenuEntity> adminMenus) {
|
||||
if (directGrantIds.isEmpty() || adminMenus.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
PermissionMenuEntity taskMenu = findDataPermission("admin_shop_data_crawl_tasks");
|
||||
PermissionMenuEntity duplicateCheckMenu = findDataPermission("admin_shop_data_duplicate_check");
|
||||
PermissionMenuEntity dataPermission = findDataPermission(SHOP_DATA_CRAWL_DATA_PERMISSION_KEY);
|
||||
if (dataPermission == null || dataPermission.getId() == null) {
|
||||
return;
|
||||
}
|
||||
// 直接授权里可能是“店铺管理”这类一级分组:按父子关系展开后再判定。
|
||||
Set<Long> effective = expandDescendantIds(new LinkedHashSet<>(directGrantIds), adminMenus);
|
||||
boolean shopDataRelated = (taskMenu != null && taskMenu.getId() != null
|
||||
&& effective.contains(taskMenu.getId()))
|
||||
|| (duplicateCheckMenu != null && duplicateCheckMenu.getId() != null
|
||||
&& effective.contains(duplicateCheckMenu.getId()));
|
||||
if (!shopDataRelated) {
|
||||
return;
|
||||
}
|
||||
Long existing = userColumnPermissionMapper.countByUserIdAndColumnId(userId, dataPermission.getId());
|
||||
if (existing != null && existing > 0) {
|
||||
return;
|
||||
}
|
||||
UserColumnPermissionEntity grant = new UserColumnPermissionEntity();
|
||||
grant.setUserId(userId);
|
||||
grant.setColumnId(dataPermission.getId());
|
||||
userColumnPermissionMapper.insert(grant);
|
||||
log.info("[shop-data-data-permission] 菜单授权自动补数据查看权限 userId={} dataColumnId={}",
|
||||
userId, dataPermission.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除普通管理员直接创建的员工中,超出该管理员当前有效权限范围的授权。
|
||||
* 只清理越权项,保留员工合法持有的其他授权。超级管理员无此限制。
|
||||
|
||||
Reference in New Issue
Block a user