From b3c9fdfedd0e738538bbcc52ffec89d27ce9d49f Mon Sep 17 00:00:00 2001 From: wh Date: Thu, 23 Apr 2026 17:38:39 +0800 Subject: [PATCH] =?UTF-8?q?datapermissve=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DataPermissionService.java | 51 ++++++++++++------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/labelsys/backend/service/DataPermissionService.java b/src/main/java/com/labelsys/backend/service/DataPermissionService.java index db04686..64a31c8 100644 --- a/src/main/java/com/labelsys/backend/service/DataPermissionService.java +++ b/src/main/java/com/labelsys/backend/service/DataPermissionService.java @@ -33,13 +33,13 @@ public class DataPermissionService { }; } - /** - * 通用数据过滤方法 + /** + * 通用数据过滤方法(内存过滤,适用于已加载的数据) * * @param currentUser 当前登录用户 * @param allRecords 待过滤的全量数据列表 - * @param roleExtractor 从数据对象中提取“关联角色”或“创建者角色”的函数 - * @param ownerIdExtractor 从数据对象中提取“所有者ID”的函数(用于员工只能看自己的情况) + * @param roleExtractor 从数据对象中提取"关联角色"或"创建者角色"的函数 + * @param ownerIdExtractor 从数据对象中提取"所有者ID"的函数(用于员工只能看自己的情况) * @param 数据类型 * @return 过滤后的数据列表 */ @@ -63,15 +63,12 @@ public class DataPermissionService { return switch (currentRole) { case EMPLOYEE -> - // 员工只能查看自己创建/拥有的数据 currentUserId.equals(recordOwnerId); case MANAGER -> - // 经理可以查看员工和经理的数据,不能查看总工程师的数据 recordRole == UserRole.EMPLOYEE || recordRole == UserRole.MANAGER; case ENGINEER -> - // 总工程师可以查看所有数据 true; }; }) @@ -81,13 +78,33 @@ public class DataPermissionService { /** * 针对 BizDataRecord 的便捷调用方法 */ - // public List listVisibleRecordsGeneric(LoginUser currentUser, List allRecords) { - // return filterByRole( - // currentUser, - // allRecords, - // BizDataRecord:: - // BizDataRecord::getCreatorRole, // 提取创建者角色 - // BizDataRecord::getCreatorId // 提取创建者ID - // ); - // } -} + public List listVisibleRecordsGeneric(LoginUser currentUser, List allRecords) { + return filterByRole( + currentUser, + allRecords, + BizDataRecord::getCreatorRole, + BizDataRecord::getCreatorId + ); + } + + /** + * 获取当前用户允许查看的角色列表(用于构建 SQL 查询条件) + * + * @param currentUser 当前登录用户 + * @return 允许查看的角色列表 + */ + public List getAllowedRoles(LoginUser currentUser) { + return switch (currentUser.role()) { + case EMPLOYEE -> List.of(); // 员工通过 userId 过滤,不需要角色列表 + case MANAGER -> List.of("EMPLOYEE", "MANAGER"); + case ENGINEER -> List.of("EMPLOYEE", "MANAGER", "ENGINEER"); + }; + } + + /** + * 判断当前用户是否应该通过 userId 过滤(员工专属) + */ + public boolean shouldFilterByUserId(LoginUser currentUser) { + return currentUser.role() == UserRole.EMPLOYEE; + } +} \ No newline at end of file