datapermissve优化
This commit is contained in:
@@ -34,12 +34,12 @@ public class DataPermissionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用数据过滤方法
|
* 通用数据过滤方法(内存过滤,适用于已加载的数据)
|
||||||
*
|
*
|
||||||
* @param currentUser 当前登录用户
|
* @param currentUser 当前登录用户
|
||||||
* @param allRecords 待过滤的全量数据列表
|
* @param allRecords 待过滤的全量数据列表
|
||||||
* @param roleExtractor 从数据对象中提取“关联角色”或“创建者角色”的函数
|
* @param roleExtractor 从数据对象中提取"关联角色"或"创建者角色"的函数
|
||||||
* @param ownerIdExtractor 从数据对象中提取“所有者ID”的函数(用于员工只能看自己的情况)
|
* @param ownerIdExtractor 从数据对象中提取"所有者ID"的函数(用于员工只能看自己的情况)
|
||||||
* @param <T> 数据类型
|
* @param <T> 数据类型
|
||||||
* @return 过滤后的数据列表
|
* @return 过滤后的数据列表
|
||||||
*/
|
*/
|
||||||
@@ -63,15 +63,12 @@ public class DataPermissionService {
|
|||||||
|
|
||||||
return switch (currentRole) {
|
return switch (currentRole) {
|
||||||
case EMPLOYEE ->
|
case EMPLOYEE ->
|
||||||
// 员工只能查看自己创建/拥有的数据
|
|
||||||
currentUserId.equals(recordOwnerId);
|
currentUserId.equals(recordOwnerId);
|
||||||
|
|
||||||
case MANAGER ->
|
case MANAGER ->
|
||||||
// 经理可以查看员工和经理的数据,不能查看总工程师的数据
|
|
||||||
recordRole == UserRole.EMPLOYEE || recordRole == UserRole.MANAGER;
|
recordRole == UserRole.EMPLOYEE || recordRole == UserRole.MANAGER;
|
||||||
|
|
||||||
case ENGINEER ->
|
case ENGINEER ->
|
||||||
// 总工程师可以查看所有数据
|
|
||||||
true;
|
true;
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
@@ -81,13 +78,33 @@ public class DataPermissionService {
|
|||||||
/**
|
/**
|
||||||
* 针对 BizDataRecord 的便捷调用方法
|
* 针对 BizDataRecord 的便捷调用方法
|
||||||
*/
|
*/
|
||||||
// public List<BizDataRecord> listVisibleRecordsGeneric(LoginUser currentUser, List<BizDataRecord> allRecords) {
|
public List<BizDataRecord> listVisibleRecordsGeneric(LoginUser currentUser, List<BizDataRecord> allRecords) {
|
||||||
// return filterByRole(
|
return filterByRole(
|
||||||
// currentUser,
|
currentUser,
|
||||||
// allRecords,
|
allRecords,
|
||||||
// BizDataRecord::
|
BizDataRecord::getCreatorRole,
|
||||||
// BizDataRecord::getCreatorRole, // 提取创建者角色
|
BizDataRecord::getCreatorId
|
||||||
// BizDataRecord::getCreatorId // 提取创建者ID
|
);
|
||||||
// );
|
}
|
||||||
// }
|
|
||||||
|
/**
|
||||||
|
* 获取当前用户允许查看的角色列表(用于构建 SQL 查询条件)
|
||||||
|
*
|
||||||
|
* @param currentUser 当前登录用户
|
||||||
|
* @return 允许查看的角色列表
|
||||||
|
*/
|
||||||
|
public List<String> 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user