• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/provider/templateprovider.php
  • Класс: BitrixTasksProviderTemplateProvider
  • Вызов: TemplateProvider::makeAccessSql
private function makeAccessSql(): self
{
	if (!$this->userId)
	{
		return $this;
	}

	$isAdmin = (array_key_exists('USER_IS_ADMIN', $this->arParams) ? $this->arParams['USER_IS_ADMIN'] : User::isSuper($this->userId));
	if ($isAdmin)
	{
		return $this;
	}

	$query = [];
	$permissions = $this->getPermissions();

	// user can view department's templates
	$departmentMembers = $this->getDepartmentMembers();

	if (
		!empty($departmentMembers)
		&& in_array(PermissionDictionary::TEMPLATE_DEPARTMENT_VIEW, $permissions)
	)
	{
		$query[] = 'TT.CREATED_BY IN ('. implode(',', $departmentMembers) .')';
	}

	// non department's templates
	if (in_array(PermissionDictionary::TEMPLATE_NON_DEPARTMENT_VIEW, $permissions))
	{
		$query[] = 'TT.CREATED_BY NOT IN ('. (!empty($departmentMembers) ? implode(',', $departmentMembers) : 0) .')';
	}

	// individual rights
	$accessCodes = $this->getUserModel()->getAccessCodes();
	if (!empty($accessCodes))
	{
		$this->strFrom .= "nLEFT JOIN ". TasksTemplatePermissionTable::getTableName() . " TTP ON TTP.TEMPLATE_ID = TT.ID";
		$query[] = '
			TTP.ACCESS_CODE IN ("'. implode('","', $accessCodes) .'")
			AND TTP.PERMISSION_ID IN ('. PermissionDictionary::TEMPLATE_VIEW .', '. PermissionDictionary::TEMPLATE_FULL .')
		';
	}

	if (empty($query))
	{
		$this->arSqlSearch[] = '(1 = 0)';
	}
	else
	{
		$this->arSqlSearch[] = '((' . implode(') OR (', $query) . '))';
	}

	return $this;
}