fix #557: guide permission-driven VPD flow
This commit is contained in:
@@ -20,6 +20,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
@Service
|
||||
public class OrdsMetadataService {
|
||||
|
||||
private static final String VECTOR_SEARCH_OBJECT = "CB_VECTOR_SEARCH_DOCUMENTS";
|
||||
|
||||
private final OrdsMetadataMapper mapper;
|
||||
private final JdbcTemplate jdbcTemplate;
|
||||
private final JdbcTemplate ordsMetadataJdbcTemplate;
|
||||
@@ -77,6 +79,7 @@ public class OrdsMetadataService {
|
||||
|
||||
public String objectQueryHandlerSource(long objectId) {
|
||||
ProtectedObject object = protectedObjectService.assertEnabled(objectId);
|
||||
rejectGenericVectorHandler(object);
|
||||
List<String> columns = protectedObjectService.findColumns(objectId).stream()
|
||||
.map(ProtectedColumn::columnName)
|
||||
.toList();
|
||||
@@ -138,6 +141,7 @@ public class OrdsMetadataService {
|
||||
@Transactional
|
||||
public OrdsObjectHandlerResult createObjectQueryHandler(long objectId) {
|
||||
ProtectedObject object = protectedObjectService.assertEnabled(objectId);
|
||||
rejectGenericVectorHandler(object);
|
||||
List<String> columns = protectedObjectService.findColumns(objectId).stream()
|
||||
.map(ProtectedColumn::columnName)
|
||||
.toList();
|
||||
@@ -263,6 +267,14 @@ public class OrdsMetadataService {
|
||||
""".formatted(selectColumns, object.owner(), object.objectName());
|
||||
}
|
||||
|
||||
private void rejectGenericVectorHandler(ProtectedObject object) {
|
||||
if (VECTOR_SEARCH_OBJECT.equalsIgnoreCase(object.objectName())) {
|
||||
throw new AppException(
|
||||
"벡터 검색 객체는 일반 Handler로 등록할 수 없습니다. "
|
||||
+ "29_agent_ords_vector_search_ords.sql의 전용 Handler를 사용하세요(EMBEDDING 미노출).");
|
||||
}
|
||||
}
|
||||
|
||||
private String handlerSourceTypeCode(String sourceType) {
|
||||
String normalized = sourceType == null ? "" : sourceType.toLowerCase(Locale.ROOT);
|
||||
if (normalized.contains("query")) {
|
||||
|
||||
Reference in New Issue
Block a user