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)