From bdd90fee310c3523c04c34df69a47dae73eb7c42 Mon Sep 17 00:00:00 2001
From: JoinTyang <41655440+JoinTyang@users.noreply.github.com>
Date: Fri, 16 Aug 2024 17:41:17 +0800
Subject: [PATCH] repo admin can enable metadata (#6569)
---
frontend/src/components/dir-view-mode/dir-column-nav.js | 2 +-
frontend/src/components/dir-view-mode/dir-views.js | 5 ++---
seahub/api2/endpoints/metadata_manage.py | 8 ++++++--
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/frontend/src/components/dir-view-mode/dir-column-nav.js b/frontend/src/components/dir-view-mode/dir-column-nav.js
index c1337c8b7b..a617a85e23 100644
--- a/frontend/src/components/dir-view-mode/dir-column-nav.js
+++ b/frontend/src/components/dir-view-mode/dir-column-nav.js
@@ -322,7 +322,7 @@ class DirColumnNav extends React.Component {
isDisplayFiles={this.state.isDisplayFiles}
/>
-
+
{
+const DirViews = ({ userPerm, repoID, currentPath, currentRepoInfo }) => {
const enableMetadataManagement = useMemo(() => {
return window.app.pageOptions.enableMetadataManagement;
// eslint-disable-next-line react-hooks/exhaustive-deps
@@ -13,8 +13,7 @@ const DirViews = ({ userPerm, repoID, currentPath }) => {
const [showMetadataStatusManagementDialog, setShowMetadataStatusManagementDialog] = useState(false);
const { enableMetadata, updateEnableMetadata, navigation } = useMetadata();
const moreOperations = useMemo(() => {
- if (!enableMetadataManagement) return [];
- if (userPerm !== 'rw' && userPerm !== 'admin') return [];
+ if (!enableMetadataManagement || !currentRepoInfo.is_admin) return [];
return [
{ key: 'extended-properties', value: gettext('Extended properties') }
];
diff --git a/seahub/api2/endpoints/metadata_manage.py b/seahub/api2/endpoints/metadata_manage.py
index 3f60c76b6f..5751c98adc 100644
--- a/seahub/api2/endpoints/metadata_manage.py
+++ b/seahub/api2/endpoints/metadata_manage.py
@@ -14,6 +14,7 @@ from seahub.views import check_folder_permission
from seahub.repo_metadata.utils import add_init_metadata_task, gen_unique_id, init_metadata, get_sys_columns
from seahub.repo_metadata.metadata_server_api import MetadataServerAPI, list_metadata_view_records
from seahub.utils.timeutils import datetime_to_isoformat_timestr
+from seahub.utils.repo import is_repo_admin
from seaserv import seafile_api
@@ -72,6 +73,10 @@ class MetadataManage(APIView):
error_msg = 'Library %s not found.' % repo_id
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
+ if not is_repo_admin(request.user.username, repo_id):
+ error_msg = 'Permission denied.'
+ return api_error(status.HTTP_403_FORBIDDEN, error_msg)
+
# permission check
permission = check_folder_permission(request, repo_id, '/')
if not permission:
@@ -115,8 +120,7 @@ class MetadataManage(APIView):
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
# permission check
- permission = check_folder_permission(request, repo_id, '/')
- if not permission:
+ if not is_repo_admin(request.user.username, repo_id):
error_msg = 'Permission denied.'
return api_error(status.HTTP_403_FORBIDDEN, error_msg)