• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/task.php
  • Класс: CTasks
  • Вызов: CTasks::getPermissionFilterConditions
static function getPermissionFilterConditions($arParams,
	$behaviour = ['ALIAS' => '', 'USE_PLACEHOLDERS' => false])
{
	if (!is_array($behaviour))
	{
		$behaviour = [];
	}
	if (!isset($behaviour['ALIAS']))
	{
		$behaviour['ALIAS'] = '';
	}
	if (!isset($behaviour['USE_PLACEHOLDERS']))
	{
		$behaviour['USE_PLACEHOLDERS'] = false;
	}

	$arSubSqlSearch = [];
	$fields = [];

	$a = $behaviour['ALIAS'];
	$b = $behaviour;
	$f =& $fields;

	if (!is_array($arParams))
	{
		$arParams = [];
	}

	if (array_key_exists('USER_ID', $arParams) && ($arParams['USER_ID'] > 0))
	{
		$userID = (int)$arParams['USER_ID'];
	}
	else
	{
		$userID = User::getId();
	}

	if (array_key_exists('TASK_MEMBER_JOINED', $arParams) && $arParams['TASK_MEMBER_JOINED'])
	{
		$taskMemberJoined = true;
	}
	else
	{
		$taskMemberJoined = false;
	}

	if (!User::isSuper($userID))
	{
		// subordinate check
		$arParams['FIELDS'] =& $fields;
		if ($strSql = CTasks::GetSubordinateSql($a, $arParams, $behaviour))
		{
			$arSubSqlSearch[] = "EXISTS(" . $strSql . ")";
		}

		// group permission check
		if (
			$arAllowedGroups = IntegrationSocialNetworkGroup::getIdsByAllowedAction(
				'view_all',
				true,
				($arParams['USER_ID'] ?? null)
			)
		)
		{
			$arSubSqlSearch[] =
				'('
				. static::placeFieldSql('GROUP_ID', $b, $f)
				. ' IN ('
				. implode(',', $arAllowedGroups)
				. '))'
			;
		}

		if (!$taskMemberJoined || ($taskMemberJoined && !empty($arSubSqlSearch)))
		{
			$arSubSqlSearch[] = static::placeFieldSql('CREATED_BY', $b, $f) . " = '" . $userID . "'";
			$arSubSqlSearch[] = static::placeFieldSql('RESPONSIBLE_ID', $b, $f) . " = '" . $userID . "'";
			$arSubSqlSearch[] =
				"EXISTS(
				SELECT 'x'
				FROM b_tasks_member "
				. $a
				. "TM
				WHERE
					"
				. $a
				. "TM.TASK_ID = "
				. static::placeFieldSql('ID', $b, $f)
				. " AND "
				. $a
				. "TM.USER_ID = '"
				. $userID
				. "'
				)";
		}
	}

	return [$arSubSqlSearch, $fields];
}