• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/integration/bizproc/document/task.php
  • Класс: BitrixTasksIntegrationBizprocDocumentTask
  • Вызов: Task::canUserOperateDocument
static function canUserOperateDocument($operation, $userId, $documentId, $arParameters = array())
{
	$userId = (int) $userId;
	$user = new CBPWorkflowTemplateUser($userId);

	if ($user->isAdmin())
	{
		return true; //Admin is the Lord of the Automation
	}

	if (BitrixTasksUtilUser::isExternalUser($userId))
	{
		return false;
	}

	switch ($operation)
	{
		case CBPCanUserOperateOperation::CreateWorkflow:
		case CBPCanUserOperateOperation::CreateAutomation:
		{
			//for admins only, already checked
			break;
		}

		case CBPCanUserOperateOperation::StartWorkflow:
		case CBPCanUserOperateOperation::ViewWorkflow:
		case CBPCanUserOperateOperation::ReadDocument:
		{
			$members = MemberTable::getList([
				'filter' => ['=TASK_ID' => $documentId],
				'select' => ['USER_ID']
			])->fetchAll();

			$members = array_column($members, 'USER_ID');

			return in_array($userId, $members);
		}

		case CBPCanUserOperateOperation::WriteDocument:
		{
			$creatorId = MemberTable::getList([
				'filter' => ['=TASK_ID' => $documentId, '=TYPE' => 'O'],
				'select' => ['USER_ID']
			])->fetch()['USER_ID'];

			return (int) $creatorId === (int) $userId;
		}
	}

	return false;
}