Skip to content

Commit a5edaac

Browse files
fix(policy): expose custom properties via RuleEvaluator and use JsonUtils for extension (#27033)
1 parent 5ea8254 commit a5edaac

2 files changed

Lines changed: 27 additions & 7 deletions

File tree

openmetadata-service/src/main/java/org/openmetadata/service/security/policyevaluator/ResourceContext.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.openmetadata.schema.type.EntityReference;
2020
import org.openmetadata.schema.type.Include;
2121
import org.openmetadata.schema.type.TagLabel;
22+
import org.openmetadata.schema.utils.JsonUtils;
2223
import org.openmetadata.service.Entity;
2324
import org.openmetadata.service.exception.EntityNotFoundException;
2425
import org.openmetadata.service.jdbi3.EntityRepository;
@@ -189,17 +190,17 @@ public List<EntityReference> getDomains() {
189190
}
190191

191192
@Override
192-
@SuppressWarnings("unchecked")
193193
public Map<String, Object> getCustomProperties() {
194194
resolveEntity();
195-
if (entity == null) {
195+
if (entity == null || entity.getExtension() == null) {
196196
return Collections.emptyMap();
197197
}
198-
Object extension = entity.getExtension();
199-
if (extension instanceof Map) {
200-
return (Map<String, Object>) extension;
198+
try {
199+
return JsonUtils.getMap(entity.getExtension());
200+
} catch (Exception e) {
201+
LOG.warn("Failed to get custom properties: {}", e.getMessage());
202+
return Collections.emptyMap();
201203
}
202-
return Collections.emptyMap();
203204
}
204205

205206
private EntityInterface resolveEntity() {
@@ -226,7 +227,9 @@ private EntityInterface resolveEntity() {
226227
if (entityRepository.isSupportsReviewers()) {
227228
fields = EntityUtil.addField(fields, Entity.FIELD_REVIEWERS);
228229
}
229-
fields = EntityUtil.addField(fields, FIELD_EXTENSION);
230+
if (supportsExtension()) {
231+
fields = EntityUtil.addField(fields, FIELD_EXTENSION);
232+
}
230233
fieldList = entityRepository.getFields(fields);
231234
}
232235

@@ -268,5 +271,13 @@ private boolean useRepositoryCache() {
268271
return operation != ResourceContextInterface.Operation.PATCH
269272
&& operation != ResourceContextInterface.Operation.PUT;
270273
}
274+
275+
private boolean supportsExtension() {
276+
try {
277+
return entityRepository.getFields(FIELD_EXTENSION) != null;
278+
} catch (Exception e) {
279+
return false;
280+
}
281+
}
271282
}
272283

openmetadata-service/src/main/java/org/openmetadata/service/security/policyevaluator/RuleEvaluator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.util.Arrays;
77
import java.util.List;
8+
import java.util.Map;
89
import java.util.Optional;
910
import java.util.stream.Collectors;
1011
import lombok.extern.slf4j.Slf4j;
@@ -370,4 +371,12 @@ public boolean hasAnyRole(String... roles) {
370371
}
371372
return false;
372373
}
374+
375+
@SuppressWarnings("unused")
376+
public Map<String, Object> getCustomProperties() {
377+
if (resourceContext == null) {
378+
return null;
379+
}
380+
return resourceContext.getCustomProperties();
381+
}
373382
}

0 commit comments

Comments
 (0)