* Fix attackers create document in private product, project, execution and custom.

This commit is contained in:
lanzongjun
2023-06-05 11:27:12 +08:00
parent 3ceabcf182
commit e690ba62b5
2 changed files with 39 additions and 0 deletions
+38
View File
@@ -3632,6 +3632,44 @@ EOF;
return false;
}
/**
* Check object priv.
*
* @param string $objectType
* @param int $objectID
* @access public
* @return bool
*/
public function checkPrivByObject($objectType, $objectID)
{
$objectType = strtolower($objectType);
$canVisit = true;
switch($objectType)
{
case 'custom':
$doclib = $this->loadModel('doc')->getLibById($objectID);
if(($doclib->acl == 'custom' or $doclib->acl == 'private') and strpos($doclib->users, (string)$this->app->user->account) === false) $canVisit = false;
break;
case 'product':
$doclib = $this->loadModel('doc')->getLibById($objectID);
$canVisit = $this->loadModel('product')->checkPriv($doclib->product);
break;
case 'project':
$doclib = $this->loadModel('doc')->getLibById($objectID);
$canVisit = $this->loadModel('project')->checkPriv($doclib->project);
break;
case 'execution':
$doclib = $this->loadModel('doc')->getLibById($objectID);
$canVisit = $this->loadModel('execution')->checkPriv($doclib->execution);
break;
default:
break;
}
return $canVisit;
}
}
class common extends commonModel
+1
View File
@@ -377,6 +377,7 @@ class doc extends control
if(!empty($_POST))
{
if($this->loadModel('common')->checkPrivByObject($objectType, $libID) === false) return $this->send(array('result' => 'fail', 'message' => $this->lang->doc->accessDenied));
$libID = $this->post->lib;
$moduleID = $this->post->module;
if(empty($libID) and strpos($this->post->module, '_') !== false) list($libID, $moduleID) = explode('_', $this->post->module);