[feature] Add support for UserCanOnlyComment in WOPI CheckFileInfo; Fix bug 75894

This commit is contained in:
Sergey Konovalov
2025-07-10 18:14:40 +03:00
parent 465cbe07ff
commit 890deabb8d
2 changed files with 10 additions and 5 deletions

View File

@ -2370,11 +2370,14 @@ exports.install = function(server, callbackFunction) {
openCmd.userid = fileInfo.UserId;
}
}
let permissionsEdit = !fileInfo.ReadOnly && fileInfo.UserCanWrite && queryParams?.formsubmit !== "1";
let permissionsEdit = !fileInfo.ReadOnly && (!fileInfo.UserCanOnlyComment && fileInfo.UserCanWrite) && queryParams?.formsubmit !== "1";
const permissionsReview = (fileInfo.UserCanOnlyComment || fileInfo.SupportsReviewing === false) ? false : (fileInfo.UserCanReview === false ? false : fileInfo.UserCanReview);
const permissionsComment = permissionsEdit || !!fileInfo.UserCanOnlyComment;
let permissionsFillForm = permissionsEdit || queryParams?.formsubmit === "1";
let permissions = {
edit: permissionsEdit,
review: (fileInfo.SupportsReviewing === false) ? false : (fileInfo.UserCanReview === false ? false : fileInfo.UserCanReview),
review: permissionsReview,
comment: permissionsComment,
copy: fileInfo.CopyPasteRestrictions !== "CurrentDocumentOnly" && fileInfo.CopyPasteRestrictions !== "BlockAll",
print: !fileInfo.DisablePrint && !fileInfo.HidePrintOption,
chat: queryParams?.dchat!=="1",

View File

@ -594,7 +594,8 @@ function getEditorHtml(req, res) {
yield checkAndReplaceEmptyFile(ctx, fileInfo, wopiSrc, access_token, access_token_ttl, lang, ui, fileType);
}
if (!fileInfo.UserCanWrite) {
const canEdit = (fileInfo.UserCanOnlyComment || fileInfo.UserCanWrite || fileInfo.UserCanReview);
if (!canEdit) {
mode = 'view';
}
//docId
@ -728,7 +729,8 @@ function putFile(ctx, wopiParams, data, dataStream, dataSize, userLastChangeId,
}
//collabora nexcloud connector sets only UserCanWrite=true
if (fileInfo && (fileInfo.SupportsUpdate || fileInfo.UserCanWrite)) {
const canEdit = (fileInfo.UserCanOnlyComment || fileInfo.UserCanWrite || fileInfo.UserCanReview);
if (fileInfo && (fileInfo.SupportsUpdate || canEdit)) {
let commonInfo = wopiParams.commonInfo;
//todo add all the users who contributed changes to the document in this PutFile request to X-WOPI-Editors
let headers = {'X-WOPI-Override': 'PUT', 'X-WOPI-Lock': commonInfo.lockId, 'X-WOPI-Editors': userLastChangeId};
@ -749,7 +751,7 @@ function putFile(ctx, wopiParams, data, dataStream, dataSize, userLastChangeId,
ctx.logger.debug('wopi PutFile response headers=%j', postRes.response.headers);
ctx.logger.debug('wopi PutFile response body:%s', postRes.body);
} else {
ctx.logger.warn('wopi SupportsUpdate = false or UserCanWrite = false');
ctx.logger.warn('wopi SupportsUpdate = %s or canEdit = %s', fileInfo?.SupportsUpdate, canEdit);
}
} catch (err) {
ctx.logger.error('wopi error PutFile:%s', err.stack);