From e806a92e981a4e2b83bcb20781de6c7cdea3f13d Mon Sep 17 00:00:00 2001 From: devmrko Date: Fri, 26 Jun 2026 05:44:51 +0900 Subject: [PATCH] fix #477: default vpd permission filter --- .../domain/vpd/VpdPolicyFormOptions.java | 8 ++++++++ .../service/VpdPolicyService.java | 11 +++++++++-- .../templates/vpd-filter-policies.html | 16 ++++++++++------ src/main/resources/templates/vpd-policies.html | 18 +++++++++++------- 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/domain/vpd/VpdPolicyFormOptions.java b/src/main/java/com/cloudhandson/vpdbackoffice/domain/vpd/VpdPolicyFormOptions.java index 63e1684..0916ce8 100644 --- a/src/main/java/com/cloudhandson/vpdbackoffice/domain/vpd/VpdPolicyFormOptions.java +++ b/src/main/java/com/cloudhandson/vpdbackoffice/domain/vpd/VpdPolicyFormOptions.java @@ -9,4 +9,12 @@ public record VpdPolicyFormOptions( List functions, List statementTypes ) { + + public String defaultPermissionFunctionKey() { + return functions.stream() + .filter(function -> "CB_AGENT_DOC_VPD_FILTER".equalsIgnoreCase(function.functionName())) + .findFirst() + .map(VpdFunctionOption::value) + .orElse(""); + } } diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/service/VpdPolicyService.java b/src/main/java/com/cloudhandson/vpdbackoffice/service/VpdPolicyService.java index 8611ae5..e062a22 100644 --- a/src/main/java/com/cloudhandson/vpdbackoffice/service/VpdPolicyService.java +++ b/src/main/java/com/cloudhandson/vpdbackoffice/service/VpdPolicyService.java @@ -142,7 +142,7 @@ public class VpdPolicyService { throw new AppException("선택한 스키마에서 VPD 적용 대상 TABLE/VIEW를 찾을 수 없습니다: " + owner); } - FunctionRef functionRef = parseFunctionRef(functionKey); + FunctionRef functionRef = parseFunctionRef(defaultFunctionKey(functionKey)); String filterPredicate = filterPredicateValue == null ? "" : filterPredicateValue.trim(); if (functionRef == null && filterPredicate.isBlank()) { throw new AppException("벌크 적용은 기존 Function을 선택하거나 Filter predicate를 입력해야 합니다."); @@ -231,7 +231,7 @@ public class VpdPolicyService { String objectName = requiredIdentifier(command.objectName(), "Object name"); String policyName = requiredIdentifier(command.policyName(), "Policy name"); String currentUser = jdbcTemplate.queryForObject("SELECT USER FROM dual", String.class); - FunctionRef functionRef = parseFunctionRef(command.functionKey()); + FunctionRef functionRef = parseFunctionRef(defaultFunctionKey(command.functionKey())); String functionOwner; String packageName; String functionName; @@ -503,6 +503,13 @@ public class VpdPolicyService { throw new AppException("Function 선택 값이 올바르지 않습니다: " + functionKey); } + private String defaultFunctionKey(String functionKey) { + if (functionKey != null && !functionKey.isBlank()) { + return functionKey; + } + return formOptions().defaultPermissionFunctionKey(); + } + private String normalizeStatementTypes(String value) { String raw = value == null || value.isBlank() ? "SELECT" : value; List statements = List.of(raw.split(",")).stream() diff --git a/src/main/resources/templates/vpd-filter-policies.html b/src/main/resources/templates/vpd-filter-policies.html index 3d0e790..03d9781 100644 --- a/src/main/resources/templates/vpd-filter-policies.html +++ b/src/main/resources/templates/vpd-filter-policies.html @@ -146,12 +146,13 @@