Skip to content

Commit f96abc1

Browse files
fix(authorization): fix restricted entity privmitives (#10265)
1 parent 480258d commit f96abc1

File tree

2 files changed

+48
-3
lines changed

2 files changed

+48
-3
lines changed

datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/authorization/AuthorizationUtils.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,8 @@ public static <T> T restrictEntity(@Nonnull Object entity, Class<T> clazz) {
285285
// they are a `one of` non-null.
286286
// i.e. ChartProperties or ChartEditableProperties are required.
287287
if (field.getAnnotation(javax.annotation.Nonnull.class) != null
288-
|| field.getName().toLowerCase().contains("properties")) {
288+
|| field.getName().toLowerCase().contains("properties")
289+
|| field.getType().isPrimitive()) {
289290
try {
290291
switch (field.getName()) {
291292
// pass through to the restricted entity
@@ -303,21 +304,32 @@ public static <T> T restrictEntity(@Nonnull Object entity, Class<T> clazz) {
303304
return fieldGetter.invoke(entity, (Object[]) null);
304305
default:
305306
switch (field.getType().getSimpleName()) {
307+
case "boolean":
306308
case "Boolean":
307309
Method boolGetter =
308310
MethodUtils.getMatchingMethod(
309311
entity.getClass(),
310312
"get" + StringUtils.capitalise(field.getName()));
311-
return boolGetter.invoke(entity, (Object[]) null);
313+
return Boolean.TRUE.equals(
314+
boolGetter.invoke(entity, (Object[]) null));
312315
// mask these fields in the restricted entity
316+
case "char":
313317
case "String":
314318
return "";
319+
case "short":
320+
case "Short":
321+
case "int":
315322
case "Integer":
316323
return 0;
324+
case "long":
317325
case "Long":
318326
return 0L;
327+
case "float":
328+
case "Float":
329+
return 0F;
330+
case "double":
319331
case "Double":
320-
return 0.0;
332+
return 0D;
321333
case "List":
322334
return List.of();
323335
default:
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.linkedin.datahub.graphql.authorization;
2+
3+
import static org.testng.Assert.assertEquals;
4+
5+
import com.linkedin.datahub.graphql.generated.ViewProperties;
6+
import org.testng.annotations.Test;
7+
8+
public class AuthorizationUtilsTest {
9+
10+
@Test
11+
public void testRestrictedViewProperties() {
12+
// provides a test of primitive boolean
13+
ViewProperties viewProperties =
14+
ViewProperties.builder()
15+
.setMaterialized(true)
16+
.setLanguage("testLang")
17+
.setFormattedLogic("formattedLogic")
18+
.setLogic("testLogic")
19+
.build();
20+
21+
String expected =
22+
ViewProperties.builder()
23+
.setMaterialized(true)
24+
.setLanguage("")
25+
.setLogic("")
26+
.build()
27+
.toString();
28+
29+
assertEquals(
30+
AuthorizationUtils.restrictEntity(viewProperties, ViewProperties.class).toString(),
31+
expected);
32+
}
33+
}

0 commit comments

Comments
 (0)