This is an automated email from the ASF dual-hosted git repository.

roryqi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 356536d324 [#13609] fix(authz): Revert ModelVersion secrets 
MetadataObject from #12983 (#13610)
356536d324 is described below

commit 356536d3248110cb90099792352780b1d1eb6ccb
Author: MaSai <[email protected]>
AuthorDate: Wed Sep 30 16:03:30 2026 +0800

    [#13609] fix(authz): Revert ModelVersion secrets MetadataObject from #12983 
(#13610)
    
    ### What changes were proposed in this pull request?
    
    Revert ModelVersion-as-secrets MetadataObject wiring introduced in
    #12983:
    
    - Remove `MetadataObject.Type.MODEL_VERSION` and `MetadataObjects`
    four-level naming
    - Remove `ModelVersion.supportsSecrets` and Java/Python client wiring
    - Drop `MODEL_VERSION` from `SECRET_SUPPORTED_TYPES`, auth expressions,
    and docs
    - Keep `Entity.EntityType.MODEL_VERSION` and `Model.supportsSecrets`
    
    ### Why are the changes needed?
    
    #12983 incorrectly treated model versions as secret metadata objects /
    privilege bind
    targets. Secret privileges should bind like other model privileges
    (Metalake…Model).
    
    Fix: #13609
    
    ### Does this PR introduce _any_ user-facing change?
    
    Yes:
    - `getSecrets` no longer accepts `type=model_version`
    - `USE_SECRETS` / `INCLUDE_CREDENTIAL_SECRETS` no longer bind to
    `MODEL_VERSION`
    - `MetadataObject.Type.MODEL_VERSION` removed
    
    ### How was this patch tested?
    
    Existing unit tests updated for privilege binds, auth expressions,
    NameIdentifierUtil,
    jcasbin cache keys, and secret REST operations.
    
    Made with [Cursor](https://cursor.com)
    
    ---------
    
    Co-authored-by: Cursor <[email protected]>
---
 .../java/org/apache/gravitino/MetadataObject.java  |  2 --
 .../java/org/apache/gravitino/MetadataObjects.java |  5 +--
 .../apache/gravitino/authorization/Privileges.java |  3 +-
 .../org/apache/gravitino/model/ModelVersion.java   | 11 ------
 .../authorization/TestSecurableObjects.java        |  2 --
 .../gravitino/client/GenericModelCatalog.java      | 10 +++---
 .../gravitino/client/GenericModelVersion.java      | 33 ++----------------
 .../gravitino/api/authorization/privileges.py      |  1 -
 .../client-python/gravitino/api/metadata_object.py |  3 --
 .../gravitino/api/metadata_objects.py              |  6 ++--
 .../gravitino/api/model/model_version.py           |  7 ----
 .../gravitino/client/generic_model_catalog.py      | 18 +++-------
 .../gravitino/client/generic_model_version.py      | 39 ++--------------------
 .../tests/unittests/test_metadata_objects.py       |  3 +-
 .../secret/SecretPropertyOperationDispatcher.java  | 36 ++------------------
 .../apache/gravitino/utils/MetadataObjectUtil.java | 18 ----------
 .../apache/gravitino/utils/NameIdentifierUtil.java |  8 -----
 .../gravitino/utils/TestNameIdentifierUtil.java    | 10 +++---
 docs/open-api/openapi.yaml                         |  1 -
 docs/open-api/secrets.yaml                         |  2 +-
 docs/security/access-control.md                    |  4 +--
 .../AuthorizationExpressionConverter.java          | 13 +++-----
 .../jcasbin/JcasbinAuthorizationCacheKeys.java     |  7 ----
 .../TestAuthorizationExpressionConverter.java      | 11 +++---
 .../jcasbin/TestJcasbinAuthorizationCacheKeys.java |  8 -----
 .../web/rest/MetadataObjectSecretOperations.java   |  3 +-
 .../rest/TestMetadataObjectSecretOperations.java   |  6 ----
 27 files changed, 41 insertions(+), 229 deletions(-)

diff --git a/api/src/main/java/org/apache/gravitino/MetadataObject.java 
b/api/src/main/java/org/apache/gravitino/MetadataObject.java
index 24c9e06b67..6dca45345d 100644
--- a/api/src/main/java/org/apache/gravitino/MetadataObject.java
+++ b/api/src/main/java/org/apache/gravitino/MetadataObject.java
@@ -66,8 +66,6 @@ public interface MetadataObject {
     ROLE,
     /** A model is mapped to the model artifact in ML. */
     MODEL,
-    /** A model version is a checkpoint / snapshot linked to a registered 
model. */
-    MODEL_VERSION,
     /** A tag is used to help manage other metadata object. */
     TAG,
     /**
diff --git a/api/src/main/java/org/apache/gravitino/MetadataObjects.java 
b/api/src/main/java/org/apache/gravitino/MetadataObjects.java
index de1a56871d..835c1636b3 100644
--- a/api/src/main/java/org/apache/gravitino/MetadataObjects.java
+++ b/api/src/main/java/org/apache/gravitino/MetadataObjects.java
@@ -64,7 +64,7 @@ public class MetadataObjects {
           MetadataObject.Type.SEMANTIC_MODEL);
 
   private static final Set<MetadataObject.Type> VALID_FOUR_LEVEL_NAME_TYPES =
-      Sets.newHashSet(MetadataObject.Type.COLUMN, 
MetadataObject.Type.MODEL_VERSION);
+      Sets.newHashSet(MetadataObject.Type.COLUMN);
 
   private static final Map<Set<MetadataObject.Type>, Integer> 
TYPE_TO_EXPECT_LENGTH =
       ImmutableMap.of(
@@ -148,9 +148,6 @@ public class MetadataObjects {
       case COLUMN:
         parentType = MetadataObject.Type.TABLE;
         break;
-      case MODEL_VERSION:
-        parentType = MetadataObject.Type.MODEL;
-        break;
       case TABLE:
       case VIEW:
       case FILESET:
diff --git 
a/api/src/main/java/org/apache/gravitino/authorization/Privileges.java 
b/api/src/main/java/org/apache/gravitino/authorization/Privileges.java
index 9519fe2e27..9094e18b9f 100644
--- a/api/src/main/java/org/apache/gravitino/authorization/Privileges.java
+++ b/api/src/main/java/org/apache/gravitino/authorization/Privileges.java
@@ -81,8 +81,7 @@ public class Privileges {
           MetadataObject.Type.VIEW,
           MetadataObject.Type.TOPIC,
           MetadataObject.Type.FILESET,
-          MetadataObject.Type.MODEL,
-          MetadataObject.Type.MODEL_VERSION);
+          MetadataObject.Type.MODEL);
 
   private static final Set<MetadataObject.Type> FUNCTION_SUPPORTED_TYPES =
       Sets.immutableEnumSet(
diff --git a/api/src/main/java/org/apache/gravitino/model/ModelVersion.java 
b/api/src/main/java/org/apache/gravitino/model/ModelVersion.java
index abe4206771..a9d3be4abb 100644
--- a/api/src/main/java/org/apache/gravitino/model/ModelVersion.java
+++ b/api/src/main/java/org/apache/gravitino/model/ModelVersion.java
@@ -22,7 +22,6 @@ import java.util.Collections;
 import java.util.Map;
 import org.apache.gravitino.Auditable;
 import org.apache.gravitino.annotation.Evolving;
-import org.apache.gravitino.secret.SupportsSecrets;
 
 /**
  * An interface representing a single model checkpoint under a model {@link 
Model}. A model version
@@ -96,14 +95,4 @@ public interface ModelVersion extends Auditable {
   default Map<String, String> properties() {
     return Collections.emptyMap();
   }
-
-  /**
-   * @return the {@link SupportsSecrets} if the model version supports secret 
property operations.
-   * @throws UnsupportedOperationException if the model version does not 
support secret property
-   *     operations.
-   */
-  default SupportsSecrets supportsSecrets() {
-    throw new UnsupportedOperationException(
-        "Model version does not support secret property operations.");
-  }
 }
diff --git 
a/api/src/test/java/org/apache/gravitino/authorization/TestSecurableObjects.java
 
b/api/src/test/java/org/apache/gravitino/authorization/TestSecurableObjects.java
index eb01e7ca1e..77d44f350a 100644
--- 
a/api/src/test/java/org/apache/gravitino/authorization/TestSecurableObjects.java
+++ 
b/api/src/test/java/org/apache/gravitino/authorization/TestSecurableObjects.java
@@ -449,7 +449,6 @@ public class TestSecurableObjects {
     Assertions.assertTrue(useSecrets.canBindTo(MetadataObject.Type.TOPIC));
     Assertions.assertTrue(useSecrets.canBindTo(MetadataObject.Type.FILESET));
     Assertions.assertTrue(useSecrets.canBindTo(MetadataObject.Type.MODEL));
-    
Assertions.assertTrue(useSecrets.canBindTo(MetadataObject.Type.MODEL_VERSION));
     Assertions.assertFalse(useSecrets.canBindTo(MetadataObject.Type.ROLE));
     Assertions.assertFalse(useSecrets.canBindTo(MetadataObject.Type.COLUMN));
     Assertions.assertFalse(useSecrets.canBindTo(MetadataObject.Type.FUNCTION));
@@ -462,7 +461,6 @@ public class TestSecurableObjects {
     
Assertions.assertTrue(includeCredentialSecrets.canBindTo(MetadataObject.Type.TOPIC));
     
Assertions.assertTrue(includeCredentialSecrets.canBindTo(MetadataObject.Type.FILESET));
     
Assertions.assertTrue(includeCredentialSecrets.canBindTo(MetadataObject.Type.MODEL));
-    
Assertions.assertTrue(includeCredentialSecrets.canBindTo(MetadataObject.Type.MODEL_VERSION));
     
Assertions.assertFalse(includeCredentialSecrets.canBindTo(MetadataObject.Type.ROLE));
     
Assertions.assertFalse(includeCredentialSecrets.canBindTo(MetadataObject.Type.COLUMN));
     
Assertions.assertFalse(includeCredentialSecrets.canBindTo(MetadataObject.Type.FUNCTION));
diff --git 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GenericModelCatalog.java
 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GenericModelCatalog.java
index 2d1db0022c..7f8c20973b 100644
--- 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GenericModelCatalog.java
+++ 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GenericModelCatalog.java
@@ -180,7 +180,7 @@ class GenericModelCatalog extends BaseSchemaCatalog 
implements ModelCatalog {
     resp.validate();
 
     return Arrays.stream(resp.getVersions())
-        .map(v -> new GenericModelVersion(v, restClient, modelFullIdent))
+        .map(v -> new GenericModelVersion(v))
         .toArray(ModelVersion[]::new);
   }
 
@@ -198,7 +198,7 @@ class GenericModelCatalog extends BaseSchemaCatalog 
implements ModelCatalog {
             Collections.emptyMap(),
             ErrorHandlers.modelErrorHandler());
     resp.validate();
-    return new GenericModelVersion(resp.getModelVersion(), restClient, 
modelFullIdent);
+    return new GenericModelVersion(resp.getModelVersion());
   }
 
   @Override
@@ -218,7 +218,7 @@ class GenericModelCatalog extends BaseSchemaCatalog 
implements ModelCatalog {
             ErrorHandlers.modelErrorHandler());
 
     resp.validate();
-    return new GenericModelVersion(resp.getModelVersion(), restClient, 
modelFullIdent);
+    return new GenericModelVersion(resp.getModelVersion());
   }
 
   @Override
@@ -375,7 +375,7 @@ class GenericModelCatalog extends BaseSchemaCatalog 
implements ModelCatalog {
             ErrorHandlers.modelErrorHandler());
 
     resp.validate();
-    return new GenericModelVersion(resp.getModelVersion(), restClient, 
modelFullIdent);
+    return new GenericModelVersion(resp.getModelVersion());
   }
 
   @Override
@@ -405,7 +405,7 @@ class GenericModelCatalog extends BaseSchemaCatalog 
implements ModelCatalog {
             ErrorHandlers.modelErrorHandler());
 
     resp.validate();
-    return new GenericModelVersion(resp.getModelVersion(), restClient, 
modelFullIdent);
+    return new GenericModelVersion(resp.getModelVersion());
   }
 
   /**
diff --git 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GenericModelVersion.java
 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GenericModelVersion.java
index cb04820b6d..406237ee10 100644
--- 
a/clients/client-java/src/main/java/org/apache/gravitino/client/GenericModelVersion.java
+++ 
b/clients/client-java/src/main/java/org/apache/gravitino/client/GenericModelVersion.java
@@ -18,36 +18,17 @@
  */
 package org.apache.gravitino.client;
 
-import java.util.Arrays;
 import java.util.Map;
 import org.apache.gravitino.Audit;
-import org.apache.gravitino.MetadataObject;
-import org.apache.gravitino.MetadataObjects;
-import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.dto.model.ModelVersionDTO;
 import org.apache.gravitino.model.ModelVersion;
-import org.apache.gravitino.secret.SupportsSecrets;
 
-class GenericModelVersion implements ModelVersion, SupportsSecrets {
+class GenericModelVersion implements ModelVersion {
 
   private final ModelVersionDTO modelVersionDTO;
 
-  private final MetadataObjectSecretOperations objectSecretOperations;
-
-  GenericModelVersion(
-      ModelVersionDTO modelVersionDTO, RESTClient restClient, NameIdentifier 
modelFullIdent) {
+  GenericModelVersion(ModelVersionDTO modelVersionDTO) {
     this.modelVersionDTO = modelVersionDTO;
-    MetadataObject modelVersionObject =
-        MetadataObjects.of(
-            Arrays.asList(
-                modelFullIdent.namespace().level(1),
-                modelFullIdent.namespace().level(2),
-                modelFullIdent.name(),
-                String.valueOf(modelVersionDTO.version())),
-            MetadataObject.Type.MODEL_VERSION);
-    this.objectSecretOperations =
-        new MetadataObjectSecretOperations(
-            modelFullIdent.namespace().level(0), modelVersionObject, 
restClient);
   }
 
   @Override
@@ -80,16 +61,6 @@ class GenericModelVersion implements ModelVersion, 
SupportsSecrets {
     return modelVersionDTO.auditInfo();
   }
 
-  @Override
-  public SupportsSecrets supportsSecrets() {
-    return this;
-  }
-
-  @Override
-  public Map<String, String> getSecrets() {
-    return objectSecretOperations.getSecrets();
-  }
-
   @Override
   public boolean equals(Object o) {
     if (this == o) {
diff --git a/clients/client-python/gravitino/api/authorization/privileges.py 
b/clients/client-python/gravitino/api/authorization/privileges.py
index fe14715d9a..d76be10510 100644
--- a/clients/client-python/gravitino/api/authorization/privileges.py
+++ b/clients/client-python/gravitino/api/authorization/privileges.py
@@ -1821,7 +1821,6 @@ class Privileges:
         MetadataObject.Type.TOPIC,
         MetadataObject.Type.FILESET,
         MetadataObject.Type.MODEL,
-        MetadataObject.Type.MODEL_VERSION,
     }
     MANAGE_GRANTS_SUPPORTED_TYPES = {
         MetadataObject.Type.METALAKE,
diff --git a/clients/client-python/gravitino/api/metadata_object.py 
b/clients/client-python/gravitino/api/metadata_object.py
index 7cd8fd4313..a46a9ba44a 100644
--- a/clients/client-python/gravitino/api/metadata_object.py
+++ b/clients/client-python/gravitino/api/metadata_object.py
@@ -75,9 +75,6 @@ class MetadataObject(ABC):
         MODEL = "model"
         """A model is mapped to the model artifact in ML."""
 
-        MODEL_VERSION = "model_version"
-        """A model version is a checkpoint / snapshot linked to a registered 
model."""
-
         TAG = "tag"
         """A tag is used to help manage other metadata object."""
 
diff --git a/clients/client-python/gravitino/api/metadata_objects.py 
b/clients/client-python/gravitino/api/metadata_objects.py
index c60d45a873..c84aacc1b6 100644
--- a/clients/client-python/gravitino/api/metadata_objects.py
+++ b/clients/client-python/gravitino/api/metadata_objects.py
@@ -50,7 +50,7 @@ class MetadataObjects:
             MetadataObject.Type.VIEW,
             MetadataObject.Type.FUNCTION,
         },
-        4: {MetadataObject.Type.COLUMN, MetadataObject.Type.MODEL_VERSION},
+        4: {MetadataObject.Type.COLUMN},
     }
 
     @staticmethod
@@ -98,7 +98,7 @@ class MetadataObjects:
         )
         Precondition.check_argument(
             names_len != 4 or type_ in MetadataObjects._NAMES_LEN_CONDS[4],
-            "If the length of names is 4, it must be COLUMN or MODEL_VERSION",
+            "If the length of names is 4, it must be the COLUMN type",
         )
         names = name_or_names
         for name in names:
@@ -135,8 +135,6 @@ class MetadataObjects:
         parent_type = None
         if object_type is MetadataObject.Type.COLUMN:
             parent_type = MetadataObject.Type.TABLE
-        elif object_type is MetadataObject.Type.MODEL_VERSION:
-            parent_type = MetadataObject.Type.MODEL
         elif object_type in {
             MetadataObject.Type.TABLE,
             MetadataObject.Type.FILESET,
diff --git a/clients/client-python/gravitino/api/model/model_version.py 
b/clients/client-python/gravitino/api/model/model_version.py
index fc51100a03..f1737cd2e9 100644
--- a/clients/client-python/gravitino/api/model/model_version.py
+++ b/clients/client-python/gravitino/api/model/model_version.py
@@ -19,8 +19,6 @@
 from abc import abstractmethod
 from typing import Optional, Dict, List
 from gravitino.api.auditable import Auditable
-from gravitino.api.secret.supports_secrets import SupportsSecrets
-from gravitino.exceptions.base import UnsupportedOperationException
 
 
 class ModelVersion(Auditable):
@@ -104,8 +102,3 @@ class ModelVersion(Auditable):
             The properties of the model version. An empty dictionary is 
returned if no properties are set.
         """
         pass
-
-    def support_secrets(self) -> SupportsSecrets:
-        raise UnsupportedOperationException(
-            "Model version does not support secret property operations."
-        )
diff --git a/clients/client-python/gravitino/client/generic_model_catalog.py 
b/clients/client-python/gravitino/client/generic_model_catalog.py
index e66a4678c2..cad07595cf 100644
--- a/clients/client-python/gravitino/client/generic_model_catalog.py
+++ b/clients/client-python/gravitino/client/generic_model_catalog.py
@@ -252,7 +252,7 @@ class GenericModelCatalog(BaseSchemaCatalog):  # pylint: 
disable=R0901
         model_version_info_list_resp.validate()
 
         return [
-            GenericModelVersion(version, self.rest_client, model_full_ident)
+            GenericModelVersion(version)
             for version in model_version_info_list_resp.versions()
         ]
 
@@ -283,9 +283,7 @@ class GenericModelCatalog(BaseSchemaCatalog):  # pylint: 
disable=R0901
         )
         model_version_resp.validate()
 
-        return GenericModelVersion(
-            model_version_resp.model_version(), self.rest_client, 
model_full_ident
-        )
+        return GenericModelVersion(model_version_resp.model_version())
 
     def get_model_version_by_alias(
         self, model_ident: NameIdentifier, alias: str
@@ -316,9 +314,7 @@ class GenericModelCatalog(BaseSchemaCatalog):  # pylint: 
disable=R0901
         )
         model_version_resp.validate()
 
-        return GenericModelVersion(
-            model_version_resp.model_version(), self.rest_client, 
model_full_ident
-        )
+        return GenericModelVersion(model_version_resp.model_version())
 
     def alter_model(self, model_ident: NameIdentifier, *changes: ModelChange) 
-> Model:
         """Alter the schema by applying the changes.
@@ -387,9 +383,7 @@ class GenericModelCatalog(BaseSchemaCatalog):  # pylint: 
disable=R0901
             resp.body, infer_missing=True
         )
         model_version_response.validate()
-        return GenericModelVersion(
-            model_version_response.model_version(), self.rest_client, 
model_full_ident
-        )
+        return GenericModelVersion(model_version_response.model_version())
 
     def alter_model_version_by_alias(
         self, model_ident: NameIdentifier, alias: str, *changes: 
ModelVersionChange
@@ -429,9 +423,7 @@ class GenericModelCatalog(BaseSchemaCatalog):  # pylint: 
disable=R0901
             resp.body, infer_missing=True
         )
         model_version_response.validate()
-        return GenericModelVersion(
-            model_version_response.model_version(), self.rest_client, 
model_full_ident
-        )
+        return GenericModelVersion(model_version_response.model_version())
 
     def link_model_version(
         self,
diff --git a/clients/client-python/gravitino/client/generic_model_version.py 
b/clients/client-python/gravitino/client/generic_model_version.py
index e435540eca..9c0cc977a1 100644
--- a/clients/client-python/gravitino/client/generic_model_version.py
+++ b/clients/client-python/gravitino/client/generic_model_version.py
@@ -14,46 +14,19 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-from typing import Dict, List, Optional
+from typing import Optional, Dict, List
 
-from gravitino.api.metadata_object import MetadataObject
-from gravitino.api.metadata_objects import MetadataObjects
 from gravitino.api.model.model_version import ModelVersion
-from gravitino.api.secret.supports_secrets import SupportsSecrets
-from gravitino.client.metadata_object_secret_operations import (
-    MetadataObjectSecretOperations,
-)
 from gravitino.dto.audit_dto import AuditDTO
 from gravitino.dto.model_version_dto import ModelVersionDTO
-from gravitino.name_identifier import NameIdentifier
-from gravitino.utils import HTTPClient
 
 
-class GenericModelVersion(ModelVersion, SupportsSecrets):
+class GenericModelVersion(ModelVersion):
     _model_version_dto: ModelVersionDTO
     """The model version DTO object."""
 
-    def __init__(
-        self,
-        model_version_dto: ModelVersionDTO,
-        rest_client: HTTPClient,
-        model_full_ident: NameIdentifier,
-    ):
+    def __init__(self, model_version_dto: ModelVersionDTO):
         self._model_version_dto = model_version_dto
-        model_version_object: MetadataObject = MetadataObjects.of(
-            [
-                model_full_ident.namespace().level(1),
-                model_full_ident.namespace().level(2),
-                model_full_ident.name(),
-                str(model_version_dto.version()),
-            ],
-            MetadataObject.Type.MODEL_VERSION,
-        )
-        self._object_secret_operations = MetadataObjectSecretOperations(
-            model_full_ident.namespace().level(0),
-            model_version_object,
-            rest_client,
-        )
 
     def version(self) -> int:
         return self._model_version_dto.version()
@@ -72,9 +45,3 @@ class GenericModelVersion(ModelVersion, SupportsSecrets):
 
     def audit_info(self) -> AuditDTO:
         return self._model_version_dto.audit_info()
-
-    def support_secrets(self) -> SupportsSecrets:
-        return self
-
-    def get_secrets(self) -> Dict[str, str]:
-        return self._object_secret_operations.get_secrets()
diff --git a/clients/client-python/tests/unittests/test_metadata_objects.py 
b/clients/client-python/tests/unittests/test_metadata_objects.py
index 2e47aa480f..7e1a8c97d3 100644
--- a/clients/client-python/tests/unittests/test_metadata_objects.py
+++ b/clients/client-python/tests/unittests/test_metadata_objects.py
@@ -124,7 +124,8 @@ class TestMetadataObjects(unittest.TestCase):
             )
 
         with self.assertRaisesRegex(
-            IllegalArgumentException, "If the length of names is 4, it must be 
COLUMN"
+            IllegalArgumentException,
+            "If the length of names is 4, it must be the COLUMN type",
         ):
             MetadataObjects.of(
                 ["catalog1", "schema1", "table1", "column1"], 
MetadataObject.Type.TABLE
diff --git 
a/core/src/main/java/org/apache/gravitino/secret/SecretPropertyOperationDispatcher.java
 
b/core/src/main/java/org/apache/gravitino/secret/SecretPropertyOperationDispatcher.java
index 8b22dc8516..2cb1fd0544 100644
--- 
a/core/src/main/java/org/apache/gravitino/secret/SecretPropertyOperationDispatcher.java
+++ 
b/core/src/main/java/org/apache/gravitino/secret/SecretPropertyOperationDispatcher.java
@@ -34,7 +34,6 @@ import org.apache.gravitino.exceptions.NoSuchEntityException;
 import org.apache.gravitino.exceptions.NoSuchFilesetException;
 import org.apache.gravitino.exceptions.NoSuchMetalakeException;
 import org.apache.gravitino.exceptions.NoSuchModelException;
-import org.apache.gravitino.exceptions.NoSuchModelVersionException;
 import org.apache.gravitino.exceptions.NoSuchSchemaException;
 import org.apache.gravitino.exceptions.NoSuchTableException;
 import org.apache.gravitino.exceptions.NoSuchTopicException;
@@ -45,7 +44,6 @@ import org.apache.gravitino.meta.FilesetEntity;
 import org.apache.gravitino.meta.SchemaEntity;
 import org.apache.gravitino.metalake.MetalakePropertiesMetadata;
 import org.apache.gravitino.model.Model;
-import org.apache.gravitino.model.ModelVersion;
 import org.apache.gravitino.rel.Table;
 import org.apache.gravitino.rel.View;
 import org.apache.gravitino.storage.IdGenerator;
@@ -53,8 +51,8 @@ import org.apache.gravitino.utils.NameIdentifierUtil;
 import org.apache.gravitino.utils.ThrowableFunction;
 
 /**
- * Dispatches secrets requests for metalake, catalog, schema, fileset, table, 
topic, view, model,
- * and model version metadata objects.
+ * Dispatches secrets requests for metalake, catalog, schema, fileset, table, 
topic, view, and model
+ * metadata objects.
  *
  * <p>Loads raw entity properties from the entity store / catalog connector, 
then builds plaintext
  * secrets via {@link SecretPropertyUtils#buildSecrets} (secret-manager URNs 
plus sensitive-named
@@ -128,8 +126,6 @@ public class SecretPropertyOperationDispatcher extends 
OperationDispatcher {
         return loadViewRawPropertiesAndMetadata(identifier);
       case MODEL:
         return loadModelRawPropertiesAndMetadata(identifier);
-      case MODEL_VERSION:
-        return loadModelVersionRawPropertiesAndMetadata(identifier);
       default:
         throw new NotSupportedException(
             "Doesn't support secret property operations for entity type: " + 
entityType);
@@ -247,34 +243,6 @@ public class SecretPropertyOperationDispatcher extends 
OperationDispatcher {
         NoSuchModelException.class);
   }
 
-  private RawPropertiesAndMetadata loadModelVersionRawPropertiesAndMetadata(
-      NameIdentifier identifier) {
-    NameIdentifier catalogIdent = 
NameIdentifierUtil.getCatalogIdentifier(identifier);
-    NameIdentifier modelIdent = 
NameIdentifier.of(identifier.namespace().levels());
-    String versionName = identifier.name();
-    return doWithCatalog(
-        catalogIdent,
-        wrapper -> {
-          wrapper.catalog().checkMetalakeInUse();
-          ModelVersion modelVersion;
-          try {
-            int version = Integer.parseInt(versionName);
-            modelVersion = wrapper.doWithModelOps(ops -> 
ops.getModelVersion(modelIdent, version));
-          } catch (NumberFormatException e) {
-            modelVersion =
-                wrapper.doWithModelOps(ops -> ops.getModelVersion(modelIdent, 
versionName));
-          }
-          Map<String, String> raw =
-              modelVersion.properties() == null ? Map.of() : 
modelVersion.properties();
-          return new RawPropertiesAndMetadata(
-              raw,
-              resolvePropertiesMetadata(
-                  wrapper, 
HasPropertyMetadata::modelVersionPropertiesMetadata));
-        },
-        NoSuchCatalogException.class,
-        NoSuchModelVersionException.class);
-  }
-
   private Map<String, String> loadMetalakeRawProperties(NameIdentifier 
identifier) {
     try {
       BaseMetalake entity = store.get(identifier, Entity.EntityType.METALAKE, 
BaseMetalake.class);
diff --git 
a/core/src/main/java/org/apache/gravitino/utils/MetadataObjectUtil.java 
b/core/src/main/java/org/apache/gravitino/utils/MetadataObjectUtil.java
index 445e3d640b..8af724480e 100644
--- a/core/src/main/java/org/apache/gravitino/utils/MetadataObjectUtil.java
+++ b/core/src/main/java/org/apache/gravitino/utils/MetadataObjectUtil.java
@@ -58,7 +58,6 @@ public class MetadataObjectUtil {
           .put(MetadataObject.Type.COLUMN, Entity.EntityType.COLUMN)
           .put(MetadataObject.Type.ROLE, Entity.EntityType.ROLE)
           .put(MetadataObject.Type.MODEL, Entity.EntityType.MODEL)
-          .put(MetadataObject.Type.MODEL_VERSION, 
Entity.EntityType.MODEL_VERSION)
           .put(MetadataObject.Type.TAG, Entity.EntityType.TAG)
           .put(MetadataObject.Type.POLICY, Entity.EntityType.POLICY)
           .put(MetadataObject.Type.JOB_TEMPLATE, 
Entity.EntityType.JOB_TEMPLATE)
@@ -135,7 +134,6 @@ public class MetadataObjectUtil {
       case TOPIC:
       case FILESET:
       case COLUMN:
-      case MODEL_VERSION:
       case MODEL:
       case FUNCTION:
         String fullName = DOT.join(metalakeName, metadataObject.fullName());
@@ -265,22 +263,6 @@ public class MetadataObjectUtil {
         check(env.internalTableDispatcher().tableExists(tableIdent), 
exceptionToThrowSupplier);
         break;
 
-      case MODEL_VERSION:
-        NameIdentifierUtil.checkModelVersion(identifier);
-        NameIdentifier modelIdent = 
NameIdentifier.of(identifier.namespace().levels());
-        check(env.internalModelDispatcher().modelExists(modelIdent), 
exceptionToThrowSupplier);
-        try {
-          int version = Integer.parseInt(object.name());
-          check(
-              env.internalModelDispatcher().modelVersionExists(modelIdent, 
version),
-              exceptionToThrowSupplier);
-        } catch (NumberFormatException e) {
-          check(
-              env.internalModelDispatcher().modelVersionExists(modelIdent, 
object.name()),
-              exceptionToThrowSupplier);
-        }
-        break;
-
       case TOPIC:
         NameIdentifierUtil.checkTopic(identifier);
         check(env.internalTopicDispatcher().topicExists(identifier), 
exceptionToThrowSupplier);
diff --git 
a/core/src/main/java/org/apache/gravitino/utils/NameIdentifierUtil.java 
b/core/src/main/java/org/apache/gravitino/utils/NameIdentifierUtil.java
index a80ccaa447..8efb9aab7b 100644
--- a/core/src/main/java/org/apache/gravitino/utils/NameIdentifierUtil.java
+++ b/core/src/main/java/org/apache/gravitino/utils/NameIdentifierUtil.java
@@ -705,14 +705,6 @@ public class NameIdentifierUtil {
         String modelParent = dot.join(ident.namespace().level(1), 
ident.namespace().level(2));
         return MetadataObjects.of(modelParent, ident.name(), 
MetadataObject.Type.MODEL);
 
-      case MODEL_VERSION:
-        checkModelVersion(ident);
-        Namespace modelVersionNs = ident.namespace();
-        String modelVersionParent =
-            dot.join(modelVersionNs.level(1), modelVersionNs.level(2), 
modelVersionNs.level(3));
-        return MetadataObjects.of(
-            modelVersionParent, ident.name(), 
MetadataObject.Type.MODEL_VERSION);
-
       case FUNCTION:
         checkFunction(ident);
         String functionParent = dot.join(ident.namespace().level(1), 
ident.namespace().level(2));
diff --git 
a/core/src/test/java/org/apache/gravitino/utils/TestNameIdentifierUtil.java 
b/core/src/test/java/org/apache/gravitino/utils/TestNameIdentifierUtil.java
index d5b8d6f4c9..4a68158c75 100644
--- a/core/src/test/java/org/apache/gravitino/utils/TestNameIdentifierUtil.java
+++ b/core/src/test/java/org/apache/gravitino/utils/TestNameIdentifierUtil.java
@@ -165,14 +165,12 @@ public class TestNameIdentifierUtil {
             NameIdentifierUtil.ofTag("metalake1", "tag1"), 
Entity.EntityType.TAG);
     assertEquals(expectedTagObject, tagObject);
 
-    // test model version
+    // test model version is not convertible to MetadataObject
     NameIdentifier modelVersion =
         NameIdentifier.of("metalake1", "catalog1", "schema1", "model1", "0");
-    MetadataObject modelVersionObject =
-        MetadataObjects.parse("catalog1.schema1.model1.0", 
MetadataObject.Type.MODEL_VERSION);
-    assertEquals(
-        modelVersionObject,
-        NameIdentifierUtil.toMetadataObject(modelVersion, 
Entity.EntityType.MODEL_VERSION));
+    assertThrows(
+        IllegalArgumentException.class,
+        () -> NameIdentifierUtil.toMetadataObject(modelVersion, 
Entity.EntityType.MODEL_VERSION));
   }
 
   @Test
diff --git a/docs/open-api/openapi.yaml b/docs/open-api/openapi.yaml
index 70a05abe55..37109e3f89 100644
--- a/docs/open-api/openapi.yaml
+++ b/docs/open-api/openapi.yaml
@@ -641,7 +641,6 @@ components:
           - "FILESET"
           - "TOPIC"
           - "MODEL"
-          - "MODEL_VERSION"
           - "FUNCTION"
           - "ROLE"
     metadataObjectFullName:
diff --git a/docs/open-api/secrets.yaml b/docs/open-api/secrets.yaml
index 11d1e32cb0..7adbffecde 100644
--- a/docs/open-api/secrets.yaml
+++ b/docs/open-api/secrets.yaml
@@ -90,7 +90,7 @@ paths:
         are not returned by this API. Clients must not treat a remaining 
****** value
         as a usable credential for those keys.
 
-        Supported types: metalake, catalog, schema, fileset, table, topic, 
view, model, model_version.
+        Supported types: metalake, catalog, schema, fileset, table, topic, 
view, model.
       responses:
         "200":
           description: Returns the secrets map for the specified metadata 
object.
diff --git a/docs/security/access-control.md b/docs/security/access-control.md
index 24e05dd454..58b3d41974 100755
--- a/docs/security/access-control.md
+++ b/docs/security/access-control.md
@@ -202,8 +202,8 @@ sets the scope of the grant. Binding a privilege to a type 
not listed for it is
 | `REGISTER_MODEL`     | Metalake, Catalog, Schema                             
                      | Register models in any schema in scope                  
             |
 | `LINK_MODEL_VERSION` | Metalake, Catalog, Schema, Model                      
                      | Link versions to any model in scope                     
             |
 | `USE_MODEL`          | Metalake, Catalog, Schema, Model                      
                      | Read the metadata of, and download versions of, any 
model in scope   |
-| `USE_SECRETS`                   | Metalake, Catalog, Schema, Table, View, 
Topic, Fileset, Model, ModelVersion | Call `getSecrets` (cloud access-key pairs 
omitted unless also granted `INCLUDE_CREDENTIAL_SECRETS`) |
-| `INCLUDE_CREDENTIAL_SECRETS`    | Metalake, Catalog, Schema, Table, View, 
Topic, Fileset, Model, ModelVersion | With `USE_SECRETS`, include cloud 
access-key pairs in the `getSecrets` result |
+| `USE_SECRETS`                   | Metalake, Catalog, Schema, Table, View, 
Topic, Fileset, Model | Call `getSecrets` (cloud access-key pairs omitted 
unless also granted `INCLUDE_CREDENTIAL_SECRETS`) |
+| `INCLUDE_CREDENTIAL_SECRETS`    | Metalake, Catalog, Schema, Table, View, 
Topic, Fileset, Model | With `USE_SECRETS`, include cloud access-key pairs in 
the `getSecrets` result |
 | `REGISTER_FUNCTION`  | Metalake, Catalog, Schema                             
                      | Register functions in any schema in scope               
             |
 | `EXECUTE_FUNCTION`   | Metalake, Catalog, Schema, Function                   
                      | Read the metadata of, and execute, any function in 
scope             |
 | `MODIFY_FUNCTION`    | Metalake, Catalog, Schema, Function                   
                      | Alter or drop any function in scope                     
             |
diff --git 
a/server-common/src/main/java/org/apache/gravitino/server/authorization/expression/AuthorizationExpressionConverter.java
 
b/server-common/src/main/java/org/apache/gravitino/server/authorization/expression/AuthorizationExpressionConverter.java
index 6732b44fbb..556bf75b9f 100644
--- 
a/server-common/src/main/java/org/apache/gravitino/server/authorization/expression/AuthorizationExpressionConverter.java
+++ 
b/server-common/src/main/java/org/apache/gravitino/server/authorization/expression/AuthorizationExpressionConverter.java
@@ -185,7 +185,6 @@ public class AuthorizationExpressionConverter {
               ( entityType == 'JOB' && (%s)) ||
               ( entityType == 'JOB_TEMPLATE' && (%s)) ||
               ( entityType == 'COLUMN' && (%s)) ||
-              ( entityType == 'MODEL_VERSION' && (%s)) ||
               ( entityType == 'FUNCTION' && (%s))
               """
             .formatted(
@@ -203,7 +202,6 @@ public class AuthorizationExpressionConverter {
                 LOAD_JOB_AUTHORIZATION_EXPRESSION,
                 LOAD_JOB_TEMPLATE_AUTHORIZATION_EXPRESSION,
                 LOAD_TABLE_AUTHORIZATION_EXPRESSION,
-                LOAD_MODEL_AUTHORIZATION_EXPRESSION,
                 LOAD_FUNCTION_AUTHORIZATION_EXPRESSION));
   }
 
@@ -297,16 +295,15 @@ public class AuthorizationExpressionConverter {
     expression =
         expression.replaceAll(
             "ANY_USE_SECRETS",
-            "((ANY(USE_SECRETS, METALAKE, CATALOG, SCHEMA, TABLE, VIEW, TOPIC, 
FILESET, MODEL,"
-                + " MODEL_VERSION)) && !(ANY(DENY_USE_SECRETS, METALAKE, 
CATALOG, SCHEMA, TABLE,"
-                + " VIEW, TOPIC, FILESET, MODEL, MODEL_VERSION)))");
+            "((ANY(USE_SECRETS, METALAKE, CATALOG, SCHEMA, TABLE, VIEW, TOPIC, 
FILESET, MODEL))"
+                + " && !(ANY(DENY_USE_SECRETS, METALAKE, CATALOG, SCHEMA, 
TABLE, VIEW, TOPIC,"
+                + " FILESET, MODEL)))");
     expression =
         expression.replaceAll(
             "ANY_INCLUDE_CREDENTIAL_SECRETS",
             "((ANY(INCLUDE_CREDENTIAL_SECRETS, METALAKE, CATALOG, SCHEMA, 
TABLE, VIEW, TOPIC,"
-                + " FILESET, MODEL, MODEL_VERSION)) && 
!(ANY(DENY_INCLUDE_CREDENTIAL_SECRETS,"
-                + " METALAKE, CATALOG, SCHEMA, TABLE, VIEW, TOPIC, FILESET, 
MODEL,"
-                + " MODEL_VERSION)))");
+                + " FILESET, MODEL)) && !(ANY(DENY_INCLUDE_CREDENTIAL_SECRETS, 
METALAKE, CATALOG,"
+                + " SCHEMA, TABLE, VIEW, TOPIC, FILESET, MODEL)))");
     expression =
         expression.replaceAll(
             "ANY_LINK_MODEL_VERSION",
diff --git 
a/server-common/src/main/java/org/apache/gravitino/server/authorization/jcasbin/JcasbinAuthorizationCacheKeys.java
 
b/server-common/src/main/java/org/apache/gravitino/server/authorization/jcasbin/JcasbinAuthorizationCacheKeys.java
index 875756e73a..c6d0228186 100644
--- 
a/server-common/src/main/java/org/apache/gravitino/server/authorization/jcasbin/JcasbinAuthorizationCacheKeys.java
+++ 
b/server-common/src/main/java/org/apache/gravitino/server/authorization/jcasbin/JcasbinAuthorizationCacheKeys.java
@@ -58,13 +58,6 @@ final class JcasbinAuthorizationCacheKeys {
         parts.add(MetadataObject.Type.COLUMN.name());
         parts.add(names[names.length - 1]);
         break;
-      case MODEL_VERSION:
-        appendCatalogAndSchemas(parts, names, names.length - 2);
-        parts.add(MetadataObject.Type.MODEL.name());
-        parts.add(names[names.length - 2]);
-        parts.add(MetadataObject.Type.MODEL_VERSION.name());
-        parts.add(names[names.length - 1]);
-        break;
       case VIEW:
       case TOPIC:
       case FILESET:
diff --git 
a/server-common/src/test/java/org/apache/gravitino/server/authorization/expression/TestAuthorizationExpressionConverter.java
 
b/server-common/src/test/java/org/apache/gravitino/server/authorization/expression/TestAuthorizationExpressionConverter.java
index c14fb8e421..410ceb1b3b 100644
--- 
a/server-common/src/test/java/org/apache/gravitino/server/authorization/expression/TestAuthorizationExpressionConverter.java
+++ 
b/server-common/src/test/java/org/apache/gravitino/server/authorization/expression/TestAuthorizationExpressionConverter.java
@@ -134,9 +134,9 @@ public class TestAuthorizationExpressionConverter {
   public void testReplaceAnyPrivilegeForAnyUseSecretss() {
     String replaced = 
AuthorizationExpressionConverter.replaceAnyPrivilege("ANY_USE_SECRETS");
     Assertions.assertEquals(
-        "((ANY(USE_SECRETS, METALAKE, CATALOG, SCHEMA, TABLE, VIEW, TOPIC, 
FILESET, MODEL,"
-            + " MODEL_VERSION)) && !(ANY(DENY_USE_SECRETS, METALAKE, CATALOG, 
SCHEMA, TABLE,"
-            + " VIEW, TOPIC, FILESET, MODEL, MODEL_VERSION)))",
+        "((ANY(USE_SECRETS, METALAKE, CATALOG, SCHEMA, TABLE, VIEW, TOPIC, 
FILESET, MODEL))"
+            + " && !(ANY(DENY_USE_SECRETS, METALAKE, CATALOG, SCHEMA, TABLE, 
VIEW, TOPIC,"
+            + " FILESET, MODEL)))",
         replaced);
   }
 
@@ -146,9 +146,8 @@ public class TestAuthorizationExpressionConverter {
         
AuthorizationExpressionConverter.replaceAnyPrivilege("ANY_INCLUDE_CREDENTIAL_SECRETS");
     Assertions.assertEquals(
         "((ANY(INCLUDE_CREDENTIAL_SECRETS, METALAKE, CATALOG, SCHEMA, TABLE, 
VIEW, TOPIC,"
-            + " FILESET, MODEL, MODEL_VERSION)) && 
!(ANY(DENY_INCLUDE_CREDENTIAL_SECRETS,"
-            + " METALAKE, CATALOG, SCHEMA, TABLE, VIEW, TOPIC, FILESET, MODEL,"
-            + " MODEL_VERSION)))",
+            + " FILESET, MODEL)) && !(ANY(DENY_INCLUDE_CREDENTIAL_SECRETS, 
METALAKE, CATALOG,"
+            + " SCHEMA, TABLE, VIEW, TOPIC, FILESET, MODEL)))",
         replaced);
   }
 
diff --git 
a/server-common/src/test/java/org/apache/gravitino/server/authorization/jcasbin/TestJcasbinAuthorizationCacheKeys.java
 
b/server-common/src/test/java/org/apache/gravitino/server/authorization/jcasbin/TestJcasbinAuthorizationCacheKeys.java
index 794f9b691e..1bc0afc38d 100644
--- 
a/server-common/src/test/java/org/apache/gravitino/server/authorization/jcasbin/TestJcasbinAuthorizationCacheKeys.java
+++ 
b/server-common/src/test/java/org/apache/gravitino/server/authorization/jcasbin/TestJcasbinAuthorizationCacheKeys.java
@@ -60,14 +60,6 @@ public class TestJcasbinAuthorizationCacheKeys {
         key("ml1", "CATALOG", "cat1", "SCHEMA", "sch1", "TABLE", "tbl1", 
"COLUMN", "col1"),
         columnKey);
 
-    MetadataObject modelVersion =
-        MetadataObjects.of(
-            Arrays.asList("cat1", "sch1", "model1", "0"), 
MetadataObject.Type.MODEL_VERSION);
-    String modelVersionKey = 
JcasbinAuthorizationCacheKeys.metadataIdCacheKey("ml1", modelVersion);
-    Assertions.assertEquals(
-        key("ml1", "CATALOG", "cat1", "SCHEMA", "sch1", "MODEL", "model1", 
"MODEL_VERSION", "0"),
-        modelVersionKey);
-
     MetadataObject view =
         MetadataObjects.of(Arrays.asList("cat1", "sch1", "tbl1"), 
MetadataObject.Type.VIEW);
     String viewKey = JcasbinAuthorizationCacheKeys.metadataIdCacheKey("ml1", 
view);
diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/MetadataObjectSecretOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/MetadataObjectSecretOperations.java
index 58c778623c..c294123a8d 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/MetadataObjectSecretOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/MetadataObjectSecretOperations.java
@@ -68,8 +68,7 @@ public class MetadataObjectSecretOperations {
           MetadataObject.Type.TABLE,
           MetadataObject.Type.TOPIC,
           MetadataObject.Type.VIEW,
-          MetadataObject.Type.MODEL,
-          MetadataObject.Type.MODEL_VERSION);
+          MetadataObject.Type.MODEL);
 
   private final SecretPropertyOperationDispatcher 
secretPropertyOperationDispatcher;
 
diff --git 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestMetadataObjectSecretOperations.java
 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestMetadataObjectSecretOperations.java
index 2efe6e0d3b..abfbece364 100644
--- 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestMetadataObjectSecretOperations.java
+++ 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestMetadataObjectSecretOperations.java
@@ -129,12 +129,6 @@ public class TestMetadataObjectSecretOperations extends 
JerseyTest {
         MetadataObjects.parse("catalog.schema.model", 
MetadataObject.Type.MODEL));
   }
 
-  @Test
-  public void testGetSecretsForModelVersion() {
-    testGetSecretsForObject(
-        MetadataObjects.parse("catalog.schema.model.0", 
MetadataObject.Type.MODEL_VERSION));
-  }
-
   @Test
   public void testGetSecretsReturnsEmptyWithoutUseSecretss() throws Exception {
     MetadataObject metadataObject =

Reply via email to