mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-14 14:21:23 +00:00
fix repo trash button (#6254)
* fix repo trash button * optimize code --------- Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com>
This commit is contained in:
@@ -21,7 +21,8 @@ const {
|
|||||||
repoID,
|
repoID,
|
||||||
repoFolderName,
|
repoFolderName,
|
||||||
path,
|
path,
|
||||||
enableClean
|
enableClean,
|
||||||
|
isRepoAdmin
|
||||||
} = window.app.pageOptions;
|
} = window.app.pageOptions;
|
||||||
|
|
||||||
class RepoFolderTrash extends React.Component {
|
class RepoFolderTrash extends React.Component {
|
||||||
@@ -203,7 +204,7 @@ class RepoFolderTrash extends React.Component {
|
|||||||
</a>
|
</a>
|
||||||
<div className="d-flex justify-content-between align-items-center op-bar">
|
<div className="d-flex justify-content-between align-items-center op-bar">
|
||||||
<p className="m-0 text-truncate d-flex"><span className="mr-1">{gettext('Current path: ')}</span>{showFolder ? this.renderFolderPath() : <span className="text-truncate" title={repoFolderName}>{repoFolderName}</span>}</p>
|
<p className="m-0 text-truncate d-flex"><span className="mr-1">{gettext('Current path: ')}</span>{showFolder ? this.renderFolderPath() : <span className="text-truncate" title={repoFolderName}>{repoFolderName}</span>}</p>
|
||||||
{(path == '/' && enableClean && !showFolder) &&
|
{(path == '/' && enableClean && !showFolder && isRepoAdmin) &&
|
||||||
<button className="btn btn-secondary clean flex-shrink-0 ml-4" onClick={this.cleanTrash}>{gettext('Clean')}</button>
|
<button className="btn btn-secondary clean flex-shrink-0 ml-4" onClick={this.cleanTrash}>{gettext('Clean')}</button>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@@ -14,7 +14,7 @@ from seahub.api2.utils import api_error
|
|||||||
|
|
||||||
from seahub.signals import clean_up_repo_trash
|
from seahub.signals import clean_up_repo_trash
|
||||||
from seahub.utils.timeutils import timestamp_to_isoformat_timestr
|
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.views import check_folder_permission
|
||||||
from seahub.group.utils import is_group_admin
|
from seahub.group.utils import is_group_admin
|
||||||
from seahub.api2.endpoints.group_owned_libraries import get_group_id_by_repo_owner
|
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.'
|
error_msg = 'Permission denied.'
|
||||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
|
|
||||||
if '@seafile_group' in repo_owner:
|
if not is_repo_admin(username, repo_id):
|
||||||
group_id = get_group_id_by_repo_owner(repo_owner)
|
error_msg = 'Permission denied.'
|
||||||
if not is_group_admin(group_id, username):
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
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)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
seafile_api.clean_up_repo_history(repo_id, keep_days)
|
seafile_api.clean_up_repo_history(repo_id, keep_days)
|
||||||
|
@@ -15,7 +15,8 @@ window.app.pageOptions = {
|
|||||||
repoID: '{{repo.id}}',
|
repoID: '{{repo.id}}',
|
||||||
repoFolderName: '{{repo_folder_name|escapejs}}',
|
repoFolderName: '{{repo_folder_name|escapejs}}',
|
||||||
path: '{{path|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 %}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
{% render_bundle 'repoFolderTrash' 'js' %}
|
{% render_bundle 'repoFolderTrash' 'js' %}
|
||||||
|
@@ -22,7 +22,7 @@ from django.views.decorators.http import condition
|
|||||||
import seaserv
|
import seaserv
|
||||||
from seaserv import get_repo, get_commits, \
|
from seaserv import get_repo, get_commits, \
|
||||||
seafserv_threaded_rpc, is_repo_owner, \
|
seafserv_threaded_rpc, is_repo_owner, \
|
||||||
get_file_size, seafile_api
|
get_file_size, seafile_api, ccnet_api
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
|
|
||||||
from seahub.avatar.util import get_avatar_file_storage
|
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, \
|
is_windows_operating_system, get_file_history_suffix, IS_EMAIL_CONFIGURED, \
|
||||||
normalize_file_path
|
normalize_file_path
|
||||||
from seahub.utils.star import get_dir_starred_files
|
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.file_op import check_file_lock
|
||||||
from seahub.utils.timeutils import utc_to_local
|
from seahub.utils.timeutils import utc_to_local
|
||||||
from seahub.utils.auth import get_login_bg_image_path
|
from seahub.utils.auth import get_login_bg_image_path
|
||||||
@@ -293,6 +293,7 @@ def get_unencry_rw_repos_by_user(request):
|
|||||||
@login_required
|
@login_required
|
||||||
def repo_folder_trash(request, repo_id):
|
def repo_folder_trash(request, repo_id):
|
||||||
path = request.GET.get('path', '/')
|
path = request.GET.get('path', '/')
|
||||||
|
username = request.user.username
|
||||||
|
|
||||||
if not seafile_api.get_dir_id_by_path(repo_id, path) or \
|
if not seafile_api.get_dir_id_by_path(repo_id, path) or \
|
||||||
check_folder_permission(request, repo_id, path) != 'rw':
|
check_folder_permission(request, repo_id, path) != 'rw':
|
||||||
@@ -302,6 +303,8 @@ def repo_folder_trash(request, repo_id):
|
|||||||
if not repo:
|
if not repo:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
|
repo_admin = is_repo_admin(username, repo_id)
|
||||||
|
|
||||||
if path == '/':
|
if path == '/':
|
||||||
name = repo.name
|
name = repo.name
|
||||||
else:
|
else:
|
||||||
@@ -312,6 +315,7 @@ def repo_folder_trash(request, repo_id):
|
|||||||
'repo_folder_name': name,
|
'repo_folder_name': name,
|
||||||
'path': path,
|
'path': path,
|
||||||
'enable_clean': config.ENABLE_USER_CLEAN_TRASH,
|
'enable_clean': config.ENABLE_USER_CLEAN_TRASH,
|
||||||
|
'is_repo_admin': repo_admin
|
||||||
})
|
})
|
||||||
|
|
||||||
def can_access_repo_setting(request, repo_id, username):
|
def can_access_repo_setting(request, repo_id, username):
|
||||||
|
Reference in New Issue
Block a user