• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/binding/group.php
  • Класс: BitrixLandingBindingGroup
  • Вызов: Group::addSiteRights
protected function addSiteRights(int $siteId, array $groupRoles = []): void
{
	$tasks = self::getAccessTasks(true);
	$roleId = self::getRoleId();

	// for new binding
	if (!$groupRoles && BitrixMainLoader::includeModule('socialnetwork'))
	{
		$groupRoles = [
			'read' => SONET_ROLES_USER,
			'edit' => SONET_ROLES_USER,
			'sett' => SONET_ROLES_USER,
			'delete' => SONET_ROLES_USER,
		];

		// try to retrieve roles from group features
		$res = CSocNetFeaturesPerms::getList(
			[],
			[
				'FEATURE_ENTITY_ID' => $this->bindingId,
				'FEATURE_ENTITY_TYPE' => SONET_ENTITY_GROUP,
				'FEATURE_FEATURE' => SocialNetwork::SETTINGS_CODE,
			],
		);
		while ($row = $res->fetch())
		{
			$groupRoles[$row['OPERATION_ID']] = $row['ROLE'];
		}
	}

	foreach ($tasks as $task)
	{
		if (!isset($groupRoles[$task['NAME']]))
		{
			continue;
		}
		$check = RightsTable::getList([
			'select' => [
				'ID'
			],
			'filter' => [
				'ENTITY_ID' => $siteId,
				'=ENTITY_TYPE' => Rights::ENTITY_TYPE_SITE,
				'=ACCESS_CODE' => 'SG' . $this->bindingId . '_' . $groupRoles[$task['NAME']],
				'TASK_ID' => $task['ID'],
				'ROLE_ID' => $roleId
			],
		])->fetch();
		if (!$check)
		{
			RightsTable::add([
				'ENTITY_ID' => $siteId,
				'ENTITY_TYPE' => Rights::ENTITY_TYPE_SITE,
				'TASK_ID' => $task['ID'],
				'ACCESS_CODE' => 'SG' . $this->bindingId . '_' . $groupRoles[$task['NAME']],
				'ROLE_ID' => $roleId
			])->isSuccess();
		}
	}
}