Merge branch 'dev/task-144514' into feature/doctemplate
This commit is contained in:
@@ -909,7 +909,7 @@ const actionsMap =
|
||||
const isToolbar = info.ui === 'toolbar';
|
||||
const actions = [
|
||||
isToolbar ? {hint: docApp.fullscreen ? lang.exitFullscreen : lang.enterFullscreen, icon: docApp.fullscreen ? 'fullscreen-exit' : 'fullscreen', command: 'toggleFullscreen'} : null,
|
||||
canEditDoc ? {icon: 'edit', type: 'ghost text-primary', hint: lang.edit, rounded: 'lg', command: 'startEditDoc'} : null,
|
||||
canEditDoc ? {icon: 'edit', type: doc.editable ? 'ghost text-primary' : 'ghost text-gray', hint: doc.editable ? lang.edit : lang.needEditable, rounded: 'lg', command: doc.editable ? 'startEditDoc' : null} : null,
|
||||
(isToolbar && docApp.props.showDocOutline !== false) ? {hint: lang.docOutline, icon: 'list-box', command: 'toggleViewSideTab/outline'} : null,
|
||||
(isToolbar && docApp.props.showDocHistory !== false) ? {hint: lang.history, icon: 'history', command: 'toggleViewSideTab/history'} : null,
|
||||
moreItems.length ? {icon: 'icon-ellipsis-v', type: 'dropdown', rounded: 'lg', placement: 'bottom-end', caret: false, items: moreItems} : null,
|
||||
|
||||
@@ -1195,6 +1195,7 @@ eof;
|
||||
|
||||
if($module == 'product' and $method == 'browse' and !empty($this->app->params['storyType']) and $this->app->params['storyType'] != 'story') $method = $this->app->params['storyType'];
|
||||
if($module == 'productplan' && ($method == 'story' || $method == 'bug')) $method = 'view';
|
||||
if($module == 'doc' && $method == 'editTemplate') $method = 'createTemplate';
|
||||
|
||||
$openMethods = array(
|
||||
'user' => array('deny', 'logout'),
|
||||
|
||||
@@ -10,8 +10,11 @@ title=测试 commonModel::checkPriv();
|
||||
timeout=0
|
||||
cid=1
|
||||
|
||||
- 用户没有权限时,返回跳转的URL @{"load":"-checkpriv.php?m=user&f=deny&module=user&method=create"}没有权限
|
||||
- 用户没有权限时,返回跳转的URL @{"load":"user-deny-user-create.html"}没有权限
|
||||
- 用户没有权限时,返回跳转的URL @{"load":"user-deny-productplan-view.html"}没有权限
|
||||
- 判断工作流方法的权限,用户没有权限时,返回跳转的URL @{"load":"user-deny-flowModule-flowMethod.html"}没有权限
|
||||
- 用户有权限时,返回TRUE @1
|
||||
- 不需要判断权限的,返回TRUE @1
|
||||
|
||||
*/
|
||||
|
||||
@@ -36,6 +39,36 @@ catch (Exception $e)
|
||||
|
||||
r($result) && p() && e('{"load":"user-deny-user-create.html"}没有权限'); // 用户没有权限时,返回跳转的URL
|
||||
|
||||
$app->moduleName = 'productplan';
|
||||
$app->methodName = 'bug';
|
||||
|
||||
try
|
||||
{
|
||||
$result = $tester->loadModel('common')->checkPriv();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$result = '没有权限';
|
||||
}
|
||||
|
||||
r($result) && p() && e('{"load":"user-deny-productplan-view.html"}没有权限'); // 用户没有权限时,返回跳转的URL
|
||||
|
||||
$app->isFlow = true;
|
||||
$app->rawModule = 'flowModule';
|
||||
$app->rawMethod = 'flowMethod';
|
||||
|
||||
try
|
||||
{
|
||||
$result = $tester->loadModel('common')->checkPriv();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$result = '没有权限';
|
||||
}
|
||||
|
||||
r($result) && p() && e('{"load":"user-deny-flowModule-flowMethod.html"}没有权限'); // 判断工作流方法的权限,用户没有权限时,返回跳转的URL
|
||||
|
||||
$app->isFlow = false;
|
||||
$app->moduleName = 'user';
|
||||
$app->methodName = 'login';
|
||||
|
||||
@@ -50,4 +83,18 @@ catch (Exception $e)
|
||||
|
||||
r($result) && p() && e('1'); // 用户有权限时,返回TRUE
|
||||
|
||||
unset($_SERVER['HTTP_X_REQUESTED_WITH']);
|
||||
$app->moduleName = 'block';
|
||||
$app->methodName = 'dashboard';
|
||||
|
||||
try
|
||||
{
|
||||
$result = $tester->loadModel('common')->checkPriv();
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
$result = '没有权限';
|
||||
}
|
||||
|
||||
r($result) && p() && e('1'); // 不需要判断权限的,返回TRUE
|
||||
|
||||
unset($_SERVER['HTTP_X_REQUESTED_WITH']);
|
||||
@@ -871,13 +871,14 @@ class docModel extends model
|
||||
$doc->editable = false;
|
||||
|
||||
$isOpen = $doc->acl == 'open';
|
||||
$isAuthorOrAdmin = $doc->acl == 'private' && ($doc->addedBy == $currentAccount || ($this->app->user->admin && $spaceType !== 'mine'));
|
||||
$isAuthorOrAdmin = $doc->addedBy == $currentAccount || ($this->app->user->admin && $spaceType !== 'mine');
|
||||
$isInReadUsers = strpos(",$doc->readUsers,", ",$currentAccount,") !== false;
|
||||
$isInEditUsers = strpos(",$doc->users,", ",$currentAccount,") !== false;
|
||||
if($isOpen || $isAuthorOrAdmin || $isInReadUsers || $isInEditUsers)
|
||||
{
|
||||
$doc->editable = $isOpen || $isAuthorOrAdmin || $isInEditUsers;
|
||||
$doc->readable = $isOpen || $isAuthorOrAdmin || $isInReadUsers || $doc->editable;
|
||||
if($spaceType == 'template') $doc->editable = ($isOpen && common::hasPriv('doc', 'editTemplate')) || $isAuthorOrAdmin || $isInEditUsers;
|
||||
}
|
||||
elseif(!empty($doc->groups) || !empty($doc->readGroups))
|
||||
{
|
||||
|
||||
@@ -1832,4 +1832,23 @@ class docTest
|
||||
$templateName = $this->objectModel->dao->select('title')->from(TABLE_DOC)->where('id')->eq($templateID)->orderBy('id_desc')->fetch('title');
|
||||
return $templateName == $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置文档的权限。
|
||||
* Set document priviledge test.
|
||||
*
|
||||
* @param object $doc
|
||||
* @param string $spaceType
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
public function setDocPrivTest(object $doc, string $spaceType = 'mine'): object
|
||||
{
|
||||
$doc = $this->objectModel->setDocPriv($doc, $spaceType);
|
||||
|
||||
$doc->readable = $doc->readable ? '1' : '0';
|
||||
$doc->editable = $doc->editable ? '1' : '0';
|
||||
|
||||
return $doc;
|
||||
}
|
||||
}
|
||||
|
||||
Executable
+91
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 docModel->copyTemplate();
|
||||
timeout=0
|
||||
cid=1
|
||||
|
||||
- 超级管理员可以查看和编辑自己的文档
|
||||
- 属性readable @1
|
||||
- 属性editable @1
|
||||
- 超级管理员可以查看和编辑其他用户的公共文档
|
||||
- 属性readable @1
|
||||
- 属性editable @1
|
||||
- 作者可以查看和编辑自己的私有文档
|
||||
- 属性readable @1
|
||||
- 属性editable @1
|
||||
- 用户不可以查看和编辑别人的私有文档
|
||||
- 属性readable @0
|
||||
- 属性editable @0
|
||||
- 用户不能编辑不在编辑白名单列表中的别人的私有文档
|
||||
- 属性readable @1
|
||||
- 属性editable @0
|
||||
- 用户可以查看和编辑自己在编辑白名单列表中的别人的私有文档
|
||||
- 属性readable @1
|
||||
- 属性editable @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/doc.unittest.class.php';
|
||||
|
||||
zenData('user')->gen(5);
|
||||
su('admin');
|
||||
|
||||
$doc = new stdclass();
|
||||
$doc->acl = 'open';
|
||||
$doc->addedBy = 'admin';
|
||||
$doc->readUsers = 'admin';
|
||||
$doc->users = 'admin';
|
||||
$doc->groups = '';
|
||||
$doc->readGroups = '1,2';
|
||||
|
||||
$docTester = new docTest();
|
||||
r($docTester->setDocPrivTest($doc, 'team')) && p('readable,editable') && e('1,1'); // 超级管理员可以查看和编辑自己的文档
|
||||
|
||||
$doc->acl = 'open';
|
||||
$doc->addedBy = 'user1';
|
||||
$doc->readUsers = '';
|
||||
$doc->users = '';
|
||||
$doc->groups = '';
|
||||
$doc->readGroups = '';
|
||||
|
||||
r($docTester->setDocPrivTest($doc, 'team')) && p('readable,editable') && e('1,1'); // 超级管理员可以查看和编辑其他用户的公共文档
|
||||
|
||||
su('user1');
|
||||
|
||||
$doc->acl = 'private';
|
||||
$doc->addedBy = 'user1';
|
||||
$doc->readUsers = '';
|
||||
$doc->users = '';
|
||||
$doc->groups = '';
|
||||
$doc->readGroups = '';
|
||||
|
||||
r($docTester->setDocPrivTest($doc, 'mine')) && p('readable,editable') && e('1,1'); // 作者可以查看和编辑自己的私有文档
|
||||
|
||||
$doc->acl = 'private';
|
||||
$doc->addedBy = 'user2';
|
||||
$doc->readUsers = '';
|
||||
$doc->users = '';
|
||||
$doc->groups = '';
|
||||
$doc->readGroups = '';
|
||||
|
||||
r($docTester->setDocPrivTest($doc, 'team')) && p('readable,editable') && e('0,0'); // 用户不可以查看和编辑别人的私有文档
|
||||
|
||||
$doc->addedBy = 'user2';
|
||||
$doc->readUsers = 'user1';
|
||||
$doc->users = '';
|
||||
$doc->groups = '';
|
||||
$doc->readGroups = '';
|
||||
|
||||
r($docTester->setDocPrivTest($doc, 'team')) && p('readable,editable') && e('1,0'); // 用户不能编辑不在编辑白名单列表中的别人的私有文档
|
||||
|
||||
$doc->addedBy = 'user2';
|
||||
$doc->readUsers = '';
|
||||
$doc->users = 'user1';
|
||||
$doc->groups = '';
|
||||
$doc->readGroups = '';
|
||||
|
||||
r($docTester->setDocPrivTest($doc, 'team')) && p('readable,editable') && e('1,1'); // 用户可以查看和编辑自己在编辑白名单列表中的别人的私有文档
|
||||
@@ -32,7 +32,7 @@ $buildScopeCards = function($templates) use ($lang, $allTemplates)
|
||||
$deleteLink = createLink('doc', 'deleteTemplate', "templateID=$template->id");
|
||||
|
||||
$actions = array();
|
||||
if(hasPriv('doc', 'editTemplate')) $actions[] = array('icon' => 'edit', 'text' => $this->lang->docTemplate->edit, 'url' => $editLink);
|
||||
if($template->addedBy == $this->app->user->account || hasPriv('doc', 'editTemplate')) $actions[] = array('icon' => 'edit', 'text' => $this->lang->docTemplate->edit, 'url' => $editLink);
|
||||
if(hasPriv('doc', 'deleteTemplate')) $actions[] = array('icon' => 'trash', 'text' => $this->lang->docTemplate->delete, 'url' => $deleteLink, 'data-confirm' => $hasChildren ? $this->lang->docTemplate->confirmDeleteTemplateWithSub : $this->lang->docTemplate->confirmDelete);
|
||||
|
||||
$cardItems[] = div
|
||||
|
||||
@@ -18,7 +18,7 @@ $data['modules'] = $this->doc->getTemplateModules();
|
||||
|
||||
$privs = array();
|
||||
$privs['create'] = hasPriv('doc', 'createTemplate');
|
||||
$privs['edit'] = hasPriv('doc', 'editTemplate');
|
||||
$privs['edit'] = hasPriv('doc', 'createTemplate');
|
||||
$privs['delete'] = hasPriv('doc', 'deleteTemplate');
|
||||
$privs['view'] = hasPriv('doc', 'viewTemplate');
|
||||
$privs['addModule'] = hasPriv('doc', 'addTemplateType');
|
||||
|
||||
@@ -2960,7 +2960,7 @@ $config->group->package->manageDoctemplate = new stdclass();
|
||||
$config->group->package->manageDoctemplate->order = 15;
|
||||
$config->group->package->manageDoctemplate->subset = 'doctemplate';
|
||||
$config->group->package->manageDoctemplate->privs = array();
|
||||
$config->group->package->manageDoctemplate->privs['doc-createTemplate'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 0, 'depend' => array('doc-browseTemplate', 'doc-viewTemplate', 'doc-editTemplate'), 'recommend' => array());
|
||||
$config->group->package->manageDoctemplate->privs['doc-createTemplate'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 0, 'depend' => array('doc-browseTemplate', 'doc-viewTemplate'), 'recommend' => array());
|
||||
$config->group->package->manageDoctemplate->privs['doc-editTemplate'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 0, 'depend' => array('doc-browseTemplate', 'doc-viewTemplate'), 'recommend' => array('doc-createTemplate', 'doc-moveTemplate'));
|
||||
$config->group->package->manageDoctemplate->privs['doc-moveTemplate'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 0, 'depend' => array('doc-browseTemplate', 'doc-viewTemplate'), 'recommend' => array('doc-createTemplate', 'doc-editTemplate'));
|
||||
$config->group->package->manageDoctemplate->privs['doc-addTemplateType'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 0, 'depend' => array('doc-browseTemplate', 'doc-editTemplateType'), 'recommend' => array('doc-deleteTemplateType'));
|
||||
|
||||
Reference in New Issue
Block a user