1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-03 07:55:36 +00:00

repo owner and admin can unlock file (#4791)

Co-authored-by: lian <lian@seafile.com>
This commit is contained in:
lian
2021-01-15 18:07:27 +08:00
committed by GitHub
parent 0853bade7c
commit c3c00e4abd
2 changed files with 13 additions and 13 deletions

View File

@@ -493,7 +493,7 @@ export const Utils = {
return list; return list;
}, },
getFileOperationList: function(currentRepoInfo, dirent, isContextmenu) { getFileOperationList: function(isRepoOwner, currentRepoInfo, dirent, isContextmenu) {
let list = []; let list = [];
const { SHARE, DOWNLOAD, DELETE, RENAME, MOVE, COPY, TAGS, UNLOCK, LOCK, const { SHARE, DOWNLOAD, DELETE, RENAME, MOVE, COPY, TAGS, UNLOCK, LOCK,
COMMENT, HISTORY, ACCESS_LOG, OPEN_VIA_CLIENT } = TextTranslation; COMMENT, HISTORY, ACCESS_LOG, OPEN_VIA_CLIENT } = TextTranslation;
@@ -525,7 +525,7 @@ export const Utils = {
if (isPro) { if (isPro) {
if (dirent.is_locked) { if (dirent.is_locked) {
if (dirent.locked_by_me || dirent.lock_owner == 'OnlineOffice') { if (dirent.locked_by_me || dirent.lock_owner == 'OnlineOffice' || isRepoOwner || currentRepoInfo.id_admin) {
list.push(UNLOCK); list.push(UNLOCK);
} }
} else { } else {
@@ -560,7 +560,7 @@ export const Utils = {
getDirentOperationList: function(isRepoOwner, currentRepoInfo, dirent, isContextmenu) { getDirentOperationList: function(isRepoOwner, currentRepoInfo, dirent, isContextmenu) {
return dirent.type == 'dir' ? return dirent.type == 'dir' ?
Utils.getFolderOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu) : Utils.getFolderOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu) :
Utils.getFileOperationList(currentRepoInfo, dirent, isContextmenu); Utils.getFileOperationList(isRepoOwner, currentRepoInfo, dirent, isContextmenu);
}, },
sharePerms: function(permission) { sharePerms: function(permission) {

View File

@@ -24,7 +24,7 @@ from seahub.views import check_folder_permission
from seahub.utils.file_op import check_file_lock, if_locked_by_online_office from seahub.utils.file_op import check_file_lock, if_locked_by_online_office
from seahub.views.file import can_preview_file, can_edit_file from seahub.views.file import can_preview_file, can_edit_file
from seahub.constants import PERMISSION_READ_WRITE from seahub.constants import PERMISSION_READ_WRITE
from seahub.utils.repo import parse_repo_perm from seahub.utils.repo import parse_repo_perm, is_repo_admin, is_repo_owner
from seahub.utils.file_types import MARKDOWN, TEXT from seahub.utils.file_types import MARKDOWN, TEXT
from seahub.settings import MAX_UPLOAD_FILE_NAME_LEN, \ from seahub.settings import MAX_UPLOAD_FILE_NAME_LEN, \
@@ -295,11 +295,9 @@ class FileView(APIView):
return api_error(status.HTTP_403_FORBIDDEN, error_msg) return api_error(status.HTTP_403_FORBIDDEN, error_msg)
# rename file # rename file
new_file_name = check_filename_with_rename(repo_id, parent_dir, new_file_name = check_filename_with_rename(repo_id, parent_dir, new_file_name)
new_file_name)
try: try:
seafile_api.rename_file(repo_id, parent_dir, oldname, seafile_api.rename_file(repo_id, parent_dir, oldname, new_file_name, username)
new_file_name, username)
except SearpcError as e: except SearpcError as e:
logger.error(e) logger.error(e)
error_msg = 'Internal Server Error' error_msg = 'Internal Server Error'
@@ -586,7 +584,9 @@ class FileView(APIView):
error_msg = _("File is not locked.") error_msg = _("File is not locked.")
return api_error(status.HTTP_400_BAD_REQUEST, error_msg) return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
if locked_by_me or locked_by_online_office: if locked_by_me or locked_by_online_office or \
is_repo_owner(request, repo_id, username) or \
is_repo_admin(username, repo_id):
# unlock file # unlock file
try: try:
seafile_api.unlock_file(repo_id, path) seafile_api.unlock_file(repo_id, path)