fix #477: show target policy filters

This commit is contained in:
devmrko
2026-06-26 06:21:29 +09:00
parent 7fe8d14a40
commit d010f2659a
9 changed files with 132 additions and 4 deletions

View File

@@ -0,0 +1,20 @@
package com.cloudhandson.vpdbackoffice.domain.vpd;
import java.util.List;
public record VpdObjectFilterDetail(
String objectOwner,
String objectName,
List<Row> rows
) {
public String objectDisplayName() {
return objectOwner + "." + objectName;
}
public record Row(
VpdPolicyView policy,
VpdFunctionSource source
) {
}
}

View File

@@ -7,7 +7,8 @@ public record VpdTargetView(
String protectedYn,
String ordsPath,
int policyCount,
String policyNames
String policyNames,
String filterNames
) {
public String objectDisplayName() {

View File

@@ -35,6 +35,11 @@ public interface VpdPolicyMapper {
@Param("policyName") String policyName
);
List<VpdPolicyView> findPoliciesForObject(
@Param("objectOwner") String objectOwner,
@Param("objectName") String objectName
);
VpdPolicyView findAnyPolicy(
@Param("objectOwner") String objectOwner,
@Param("objectName") String objectName,

View File

@@ -2,6 +2,7 @@ package com.cloudhandson.vpdbackoffice.service;
import com.cloudhandson.vpdbackoffice.domain.vpd.VpdBulkApplyResult;
import com.cloudhandson.vpdbackoffice.domain.vpd.VpdFunctionSource;
import com.cloudhandson.vpdbackoffice.domain.vpd.VpdObjectFilterDetail;
import com.cloudhandson.vpdbackoffice.domain.vpd.VpdPolicyCreateCommand;
import com.cloudhandson.vpdbackoffice.domain.vpd.VpdPolicyDetail;
import com.cloudhandson.vpdbackoffice.domain.vpd.VpdPolicyExplanation;
@@ -233,6 +234,18 @@ public class VpdPolicyService {
return new VpdPolicyDetail(policy, buildAddPolicyBlock(policy));
}
public VpdObjectFilterDetail findObjectFilterDetail(String objectOwner, String objectName) {
String normalizedOwner = requiredIdentifier(objectOwner, "Object owner");
String normalizedObject = requiredIdentifier(objectName, "Object name");
List<VpdObjectFilterDetail.Row> rows = mapper.findPoliciesForObject(normalizedOwner, normalizedObject).stream()
.map(policy -> new VpdObjectFilterDetail.Row(
policy,
findFunctionSource(policy.functionOwner(), policy.packageName(), policy.functionName())
))
.toList();
return new VpdObjectFilterDetail(normalizedOwner, normalizedObject, rows);
}
@Transactional
public void createPolicy(VpdPolicyCreateCommand command) {
String objectOwner = requiredIdentifier(command.objectOwner(), "Object owner");

View File

@@ -306,6 +306,23 @@ public class VpdPolicyController {
return "fragments/vpd-policy-detail :: detail";
}
@GetMapping("/vpd-policies/object-filter-detail")
public String objectFilterDetail(
@RequestParam String objectOwner,
@RequestParam String objectName,
Model model
) {
try {
model.addAttribute("detail", vpdPolicyService.findObjectFilterDetail(objectOwner, objectName));
} catch (AppException exception) {
model.addAttribute("errorMessage", exception.getMessage());
} catch (DataAccessException exception) {
RuntimeErrorMessage message = RuntimeErrorMessages.dataAccess(exception);
model.addAttribute("errorMessage", message.message());
}
return "fragments/vpd-object-filter-detail :: detail";
}
@GetMapping("/vpd-policies/policy-explanation")
public String policyExplanation(
@RequestParam String objectOwner,