diff --git a/lib/zin/wg/docapp/js/v1.js b/lib/zin/wg/docapp/js/v1.js index 6d2af87d4a..5182ee9f81 100644 --- a/lib/zin/wg/docapp/js/v1.js +++ b/lib/zin/wg/docapp/js/v1.js @@ -696,8 +696,14 @@ function handleSaveDoc(doc) }).complete(() => { docApp.isSavingDoc = false; $(docApp.element).find('[zui-command^="saveDoc"],[zui-command^="saveNewDoc"]').removeAttr('disabled'); - const {id, acl, users, addedBy} = doc; - if(acl == 'private' && !users.includes(docAppData.currentUser) && addedBy !== docAppData.currentUser) + const {id, acl, users, groups, addedBy} = doc; + let isInEditGroups = false; + for(let groupID of Object.values(userGroups)) + { + if(groups.includes(groupID)) isInEditGroups = true; + } + + if(acl == 'private' && !users.includes(docAppData.currentUser) && addedBy !== docAppData.currentUser && !isInEditGroups) { if(docApp.hasEditingDoc) { diff --git a/lib/zin/wg/docapp/v1.php b/lib/zin/wg/docapp/v1.php index 645fa18005..a5a6a5fb3b 100644 --- a/lib/zin/wg/docapp/v1.php +++ b/lib/zin/wg/docapp/v1.php @@ -171,6 +171,7 @@ class docApp extends wg jsVar('needReadable', $lang->doc->needReadable); jsVar('vision', $config->vision); jsVar('isInModal', isInModal()); + jsVar('userGroups', $app->user->groups); /** * 定义文档应用接口链接。 diff --git a/module/doc/control.php b/module/doc/control.php index 192700340d..cb3e6b23bb 100755 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -965,8 +965,16 @@ class doc extends control $currentAccount = $this->app->user->account; $isAuthorOrAdmin = $doc->acl == 'private' && ($doc->addedBy == $currentAccount || $this->app->user->admin); $isInEditUsers = strpos(",$doc->users,", ",$currentAccount,") !== false; + $isInEditGroups = false; + if(!empty($doc->groups)) + { + foreach($this->app->user->groups as $groupID) + { + if(strpos(",$doc->groups,", ",$groupID,") !== false) $isInEditGroups = true; + } + } - if(!$isOpen && !$isAuthorOrAdmin && !$isInEditUsers) return $this->send(array('result' => 'fail', 'message' => $this->lang->doc->needEditable)); + if(!$isOpen && !$isAuthorOrAdmin && !$isInEditUsers && !$isInEditGroups) return $this->send(array('result' => 'fail', 'message' => $this->lang->doc->needEditable)); if($doc->type == 'chapter') $this->lang->doc->title = $this->lang->doc->chapterName;