xunliu commented on code in PR #5176:
URL: https://github.com/apache/gravitino/pull/5176#discussion_r1822026102
##########
authorizations/authorization-ranger/src/main/java/org/apache/gravitino/authorization/ranger/RangerAuthorizationPlugin.java:
##########
@@ -657,20 +698,386 @@ private boolean doRemoveSecurableObject(
return true;
}
+ /**
+ * IF remove the SCHEMA, Need to remove these the relevant policies,
`{schema}`, `{schema}.*`,
+ * `{schema}.*.*` <br>
+ * IF remove the TABLE, Need to remove these the relevant policies,
`{schema}.*`, `{schema}.*.*`
+ * <br>
+ * IF remove the COLUMN, Only need to remove `{schema}.*.*` <br>
+ */
+ private void doRemoveMetadataObject(RangerMetadataObject
rangerMetadataObject) {
+ switch (rangerMetadataObject.type()) {
+ case SCHEMA:
+ doRemoveSchemaMetadataObject(rangerMetadataObject);
+ break;
+ case TABLE:
+ doRemoveTableMetadataObject(rangerMetadataObject);
+ break;
+ case COLUMN:
+ removePolicyByMetadataObject(rangerMetadataObject.names());
+ break;
+ default:
+ throw new IllegalArgumentException(
+ "Unsupported metadata object type: " +
rangerMetadataObject.type());
+ }
+ }
+
+ /**
+ * Remove the SCHEMA, Need to rename these the relevant policies,
`{schema}`, `{schema}.*`,
Review Comment:
DONE.
##########
authorizations/authorization-ranger/src/main/java/org/apache/gravitino/authorization/ranger/RangerAuthorizationPlugin.java:
##########
@@ -657,20 +698,386 @@ private boolean doRemoveSecurableObject(
return true;
}
+ /**
+ * IF remove the SCHEMA, Need to remove these the relevant policies,
`{schema}`, `{schema}.*`,
+ * `{schema}.*.*` <br>
+ * IF remove the TABLE, Need to remove these the relevant policies,
`{schema}.*`, `{schema}.*.*`
+ * <br>
+ * IF remove the COLUMN, Only need to remove `{schema}.*.*` <br>
+ */
+ private void doRemoveMetadataObject(RangerMetadataObject
rangerMetadataObject) {
+ switch (rangerMetadataObject.type()) {
+ case SCHEMA:
+ doRemoveSchemaMetadataObject(rangerMetadataObject);
+ break;
+ case TABLE:
+ doRemoveTableMetadataObject(rangerMetadataObject);
+ break;
+ case COLUMN:
+ removePolicyByMetadataObject(rangerMetadataObject.names());
+ break;
+ default:
+ throw new IllegalArgumentException(
+ "Unsupported metadata object type: " +
rangerMetadataObject.type());
+ }
+ }
+
+ /**
+ * Remove the SCHEMA, Need to rename these the relevant policies,
`{schema}`, `{schema}.*`,
+ * `{schema}.*.*` <br>
+ */
+ private void doRemoveSchemaMetadataObject(RangerMetadataObject
rangerMetadataObject) {
+ Preconditions.checkArgument(
+ rangerMetadataObject.type() == RangerMetadataObject.Type.SCHEMA,
+ "The metadata object type must be SCHEMA");
+ Preconditions.checkArgument(
+ rangerMetadataObject.names().size() == 1, "The metadata object names
must be 1");
+ if (RangerHelper.RESOURCE_ALL.equals(rangerMetadataObject.name())) {
+ // Delete metalake or catalog policies in this Ranger service
+ try {
+ List<RangerPolicy> policies =
rangerClient.getPoliciesInService(rangerServiceName);
+ policies.stream()
+ .forEach(
+ policy -> {
+ try {
+ rangerClient.deletePolicy(policy.getId());
+ } catch (RangerServiceException e) {
+ LOG.error("Failed to rename the policy {}!", policy);
+ throw new RuntimeException(e);
+ }
+ });
+ } catch (RangerServiceException e) {
+ throw new RuntimeException(e);
+ }
+ } else {
+ List<List<String>> loop =
+ ImmutableList.of(
+ ImmutableList.of(rangerMetadataObject.name())
+ /** SCHEMA permission */
+ ,
+ ImmutableList.of(rangerMetadataObject.name(),
RangerHelper.RESOURCE_ALL)
+ /** TABLE permission */
+ ,
+ ImmutableList.of(
+ rangerMetadataObject.name(), RangerHelper.RESOURCE_ALL,
RangerHelper.RESOURCE_ALL)
+ /** COLUMN permission */
+ );
+ for (List<String> resNames : loop) {
+ removePolicyByMetadataObject(resNames);
+ }
+ }
+ }
+
+ /**
+ * Remove the TABLE, Need to rename these the relevant policies,
`*.{table}`, `*.{table}.{column}`
Review Comment:
DONE.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]