diff --git a/frontend/src/repo-folder-trash.js b/frontend/src/repo-folder-trash.js index 4072f73e3a..317246bc6a 100644 --- a/frontend/src/repo-folder-trash.js +++ b/frontend/src/repo-folder-trash.js @@ -21,7 +21,8 @@ const { repoID, repoFolderName, path, - enableClean + enableClean, + isRepoAdmin } = window.app.pageOptions; class RepoFolderTrash extends React.Component { @@ -203,7 +204,7 @@ class RepoFolderTrash extends React.Component {

{gettext('Current path: ')}{showFolder ? this.renderFolderPath() : {repoFolderName}}

- {(path == '/' && enableClean && !showFolder) && + {(path == '/' && enableClean && !showFolder && isRepoAdmin) && }
diff --git a/seahub/api2/endpoints/repo_trash.py b/seahub/api2/endpoints/repo_trash.py index b65cd98cc8..f7777d1983 100644 --- a/seahub/api2/endpoints/repo_trash.py +++ b/seahub/api2/endpoints/repo_trash.py @@ -14,7 +14,7 @@ from seahub.api2.utils import api_error from seahub.signals import clean_up_repo_trash from seahub.utils.timeutils import timestamp_to_isoformat_timestr -from seahub.utils.repo import get_repo_owner +from seahub.utils.repo import get_repo_owner, is_repo_admin from seahub.views import check_folder_permission from seahub.group.utils import is_group_admin from seahub.api2.endpoints.group_owned_libraries import get_group_id_by_repo_owner @@ -229,15 +229,9 @@ class RepoTrash(APIView): error_msg = 'Permission denied.' return api_error(status.HTTP_403_FORBIDDEN, error_msg) - if '@seafile_group' in repo_owner: - group_id = get_group_id_by_repo_owner(repo_owner) - if not is_group_admin(group_id, username): - error_msg = 'Permission denied.' - return api_error(status.HTTP_403_FORBIDDEN, error_msg) - else: - if username != repo_owner: - error_msg = 'Permission denied.' - return api_error(status.HTTP_403_FORBIDDEN, error_msg) + if not is_repo_admin(username, repo_id): + error_msg = 'Permission denied.' + return api_error(status.HTTP_403_FORBIDDEN, error_msg) try: seafile_api.clean_up_repo_history(repo_id, keep_days) diff --git a/seahub/templates/repo_folder_trash_react.html b/seahub/templates/repo_folder_trash_react.html index a098242c15..5c2e9e2106 100644 --- a/seahub/templates/repo_folder_trash_react.html +++ b/seahub/templates/repo_folder_trash_react.html @@ -15,7 +15,8 @@ window.app.pageOptions = { repoID: '{{repo.id}}', repoFolderName: '{{repo_folder_name|escapejs}}', path: '{{path|escapejs}}', - enableClean: {% if enable_clean %} true {% else %} false {% endif %} + enableClean: {% if enable_clean %} true {% else %} false {% endif %}, + isRepoAdmin: {% if is_repo_admin %} true {% else %} false {% endif %} }; {% render_bundle 'repoFolderTrash' 'js' %} diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py index c7ea4dfc00..632dd46b92 100644 --- a/seahub/views/__init__.py +++ b/seahub/views/__init__.py @@ -22,7 +22,7 @@ from django.views.decorators.http import condition import seaserv from seaserv import get_repo, get_commits, \ seafserv_threaded_rpc, is_repo_owner, \ - get_file_size, seafile_api + get_file_size, seafile_api, ccnet_api from pysearpc import SearpcError from seahub.avatar.util import get_avatar_file_storage @@ -46,7 +46,7 @@ from seahub.utils import render_permission_error, render_error, \ is_windows_operating_system, get_file_history_suffix, IS_EMAIL_CONFIGURED, \ normalize_file_path from seahub.utils.star import get_dir_starred_files -from seahub.utils.repo import get_library_storages, parse_repo_perm +from seahub.utils.repo import get_library_storages, parse_repo_perm, is_repo_admin from seahub.utils.file_op import check_file_lock from seahub.utils.timeutils import utc_to_local from seahub.utils.auth import get_login_bg_image_path @@ -293,6 +293,7 @@ def get_unencry_rw_repos_by_user(request): @login_required def repo_folder_trash(request, repo_id): path = request.GET.get('path', '/') + username = request.user.username if not seafile_api.get_dir_id_by_path(repo_id, path) or \ check_folder_permission(request, repo_id, path) != 'rw': @@ -302,6 +303,8 @@ def repo_folder_trash(request, repo_id): if not repo: raise Http404 + repo_admin = is_repo_admin(username, repo_id) + if path == '/': name = repo.name else: @@ -312,6 +315,7 @@ def repo_folder_trash(request, repo_id): 'repo_folder_name': name, 'path': path, 'enable_clean': config.ENABLE_USER_CLEAN_TRASH, + 'is_repo_admin': repo_admin }) def can_access_repo_setting(request, repo_id, username):