diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php index 991ead0a..e895b9e8 100755 --- a/app/Http/Controllers/Api/ProjectController.php +++ b/app/Http/Controllers/Api/ProjectController.php @@ -1336,7 +1336,10 @@ class ProjectController extends AbstractController parse_str(Request::getContent(), $data); $task_id = intval($data['task_id']); // - $task = ProjectTask::userTask($task_id, true, 2); + if (Arr::exists($data, 'content') || Arr::exists($data, 'name')) + $task = ProjectTask::userTask($task_id, true, 3); + else + $task = ProjectTask::userTask($task_id, true, 2); // 更新任务 $updateMarking = []; $task->updateTask($data, $updateMarking); diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index c063872d..7c0003ff 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -909,6 +909,20 @@ class ProjectTask extends AbstractModel return false; } + /** + * 是否是参与者或者创建人 + * @return bool + */ + public function isActor(): bool + { + $user = User::auth(); + $actor = ProjectTaskUser::whereTaskId($this->id)->whereUserid($user->userid)->exists(); + if (!$actor && $user->userid != $this->userid) { + return false; + } + return true; + } + /** * 是否有负责人 * @return bool @@ -1120,7 +1134,7 @@ class ProjectTask extends AbstractModel * 获取任务(会员有任务权限 或 会员存在项目内) * @param int $task_id * @param bool $archived true:仅限未归档, false:仅限已归档, null:不限制 - * @param int|bool $mustOwner 0|false:不限制, 1|true:限制任务或项目负责人, 2:已有负责人才限制任务或项目负责人(子任务时如果是主任务负责人也可以) + * @param int|bool $mustOwner 0|false:不限制, 1|true:限制任务或项目负责人, 2:已有负责人才限制任务或项目负责人(子任务时如果是主任务负责人也可以),3:限制项目或任务负责人或任务参与者或者任务创建人 * @param array $with * @return self */ @@ -1156,7 +1170,9 @@ class ProjectTask extends AbstractModel if (($mustOwner === 1 || $mustOwner === true) && !$task->isOwner() && !$project->owner) { throw new ApiException('仅限项目或任务负责人操作'); } - // + if ($mustOwner === 3 && !$task->isActor() && !$task->isOwner() && !$project->owner) { + throw new ApiException('仅限项目或任务负责人或任务参与者或者任务创建人操作'); + } return $task; } }