|
23 | 23 | import com.linkedin.entity.client.EntityClient;
|
24 | 24 | import com.linkedin.identity.RoleMembership;
|
25 | 25 | import com.linkedin.metadata.Constants;
|
26 |
| -import com.linkedin.policy.DataHubActorFilter; |
27 |
| -import com.linkedin.policy.DataHubPolicyInfo; |
28 |
| -import com.linkedin.policy.DataHubResourceFilter; |
| 26 | +import com.linkedin.policy.*; |
29 | 27 | import io.datahubproject.metadata.context.OperationContext;
|
30 | 28 | import io.datahubproject.test.metadata.context.TestOperationContexts;
|
31 | 29 | import java.net.URISyntaxException;
|
@@ -1043,6 +1041,92 @@ public void testEvaluatePolicyResourceFilterSpecificResourceNoMatch() throws Exc
|
1043 | 1041 | verify(_entityClient, times(0)).batchGetV2(any(), any(), any(), any());
|
1044 | 1042 | }
|
1045 | 1043 |
|
| 1044 | + @Test |
| 1045 | + public void testEvaluatePolicyResourceFilterResourceUrnStartsWithMatch() throws Exception { |
| 1046 | + final DataHubPolicyInfo dataHubPolicyInfo = new DataHubPolicyInfo(); |
| 1047 | + dataHubPolicyInfo.setType(METADATA_POLICY_TYPE); |
| 1048 | + dataHubPolicyInfo.setState(ACTIVE_POLICY_STATE); |
| 1049 | + dataHubPolicyInfo.setPrivileges(new StringArray("EDIT_ENTITY_TAGS")); |
| 1050 | + dataHubPolicyInfo.setDisplayName("My Test Display"); |
| 1051 | + dataHubPolicyInfo.setDescription("My test display!"); |
| 1052 | + dataHubPolicyInfo.setEditable(true); |
| 1053 | + |
| 1054 | + final DataHubActorFilter actorFilter = new DataHubActorFilter(); |
| 1055 | + actorFilter.setResourceOwners(true); |
| 1056 | + actorFilter.setAllUsers(true); |
| 1057 | + actorFilter.setAllGroups(true); |
| 1058 | + dataHubPolicyInfo.setActors(actorFilter); |
| 1059 | + |
| 1060 | + final DataHubResourceFilter resourceFilter = new DataHubResourceFilter(); |
| 1061 | + PolicyMatchCriterion policyMatchCriterion = |
| 1062 | + FilterUtils.newCriterion( |
| 1063 | + EntityFieldType.URN, |
| 1064 | + Collections.singletonList("urn:li:dataset:te"), |
| 1065 | + PolicyMatchCondition.STARTS_WITH); |
| 1066 | + |
| 1067 | + resourceFilter.setFilter( |
| 1068 | + new PolicyMatchFilter() |
| 1069 | + .setCriteria( |
| 1070 | + new PolicyMatchCriterionArray(Collections.singleton(policyMatchCriterion)))); |
| 1071 | + dataHubPolicyInfo.setResources(resourceFilter); |
| 1072 | + |
| 1073 | + ResolvedEntitySpec resourceSpec = buildEntityResolvers("dataset", RESOURCE_URN); |
| 1074 | + PolicyEngine.PolicyEvaluationResult result = |
| 1075 | + _policyEngine.evaluatePolicy( |
| 1076 | + systemOperationContext, |
| 1077 | + dataHubPolicyInfo, |
| 1078 | + resolvedAuthorizedUserSpec, |
| 1079 | + "EDIT_ENTITY_TAGS", |
| 1080 | + Optional.of(resourceSpec)); |
| 1081 | + assertTrue(result.isGranted()); |
| 1082 | + |
| 1083 | + // Verify no network calls |
| 1084 | + verify(_entityClient, times(0)).batchGetV2(any(), any(), any(), any()); |
| 1085 | + } |
| 1086 | + |
| 1087 | + @Test |
| 1088 | + public void testEvaluatePolicyResourceFilterResourceUrnStartsWithNoMatch() throws Exception { |
| 1089 | + final DataHubPolicyInfo dataHubPolicyInfo = new DataHubPolicyInfo(); |
| 1090 | + dataHubPolicyInfo.setType(METADATA_POLICY_TYPE); |
| 1091 | + dataHubPolicyInfo.setState(ACTIVE_POLICY_STATE); |
| 1092 | + dataHubPolicyInfo.setPrivileges(new StringArray("EDIT_ENTITY_TAGS")); |
| 1093 | + dataHubPolicyInfo.setDisplayName("My Test Display"); |
| 1094 | + dataHubPolicyInfo.setDescription("My test display!"); |
| 1095 | + dataHubPolicyInfo.setEditable(true); |
| 1096 | + |
| 1097 | + final DataHubActorFilter actorFilter = new DataHubActorFilter(); |
| 1098 | + actorFilter.setResourceOwners(true); |
| 1099 | + actorFilter.setAllUsers(true); |
| 1100 | + actorFilter.setAllGroups(true); |
| 1101 | + dataHubPolicyInfo.setActors(actorFilter); |
| 1102 | + |
| 1103 | + final DataHubResourceFilter resourceFilter = new DataHubResourceFilter(); |
| 1104 | + PolicyMatchCriterion policyMatchCriterion = |
| 1105 | + FilterUtils.newCriterion( |
| 1106 | + EntityFieldType.URN, |
| 1107 | + Collections.singletonList("urn:li:dataset:other"), |
| 1108 | + PolicyMatchCondition.STARTS_WITH); |
| 1109 | + |
| 1110 | + resourceFilter.setFilter( |
| 1111 | + new PolicyMatchFilter() |
| 1112 | + .setCriteria( |
| 1113 | + new PolicyMatchCriterionArray(Collections.singleton(policyMatchCriterion)))); |
| 1114 | + dataHubPolicyInfo.setResources(resourceFilter); |
| 1115 | + |
| 1116 | + ResolvedEntitySpec resourceSpec = buildEntityResolvers("dataset", RESOURCE_URN); |
| 1117 | + PolicyEngine.PolicyEvaluationResult result = |
| 1118 | + _policyEngine.evaluatePolicy( |
| 1119 | + systemOperationContext, |
| 1120 | + dataHubPolicyInfo, |
| 1121 | + resolvedAuthorizedUserSpec, |
| 1122 | + "EDIT_ENTITY_TAGS", |
| 1123 | + Optional.of(resourceSpec)); |
| 1124 | + assertFalse(result.isGranted()); |
| 1125 | + |
| 1126 | + // Verify no network calls |
| 1127 | + verify(_entityClient, times(0)).batchGetV2(any(), any(), any(), any()); |
| 1128 | + } |
| 1129 | + |
1046 | 1130 | @Test
|
1047 | 1131 | public void testEvaluatePolicyResourceFilterSpecificResourceMatchDomain() throws Exception {
|
1048 | 1132 | final DataHubPolicyInfo dataHubPolicyInfo = new DataHubPolicyInfo();
|
|
0 commit comments