Rights::getOperations

  1. Bitrix24 API (v. 23.675.0)
  2. landing
  3. Rights
  4. getOperations
  • Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/rights.php
  • Класс: BitrixLandingRights
  • Вызов: Rights::getOperations
static function getOperations($entityId, $entityType)
{
	// full access for allowed sites
	if (
		$entityType == self::ENTITY_TYPE_SITE &&
		in_array($entityId, self::$allowedSites)
	)
	{
		$types = self::ACCESS_TYPES;
		unset($types[self::ACCESS_TYPES['delete']]);
		return array_values($types);
	}

	// check scoped method
	if (
		$entityType == self::ENTITY_TYPE_SITE
		&& !is_array($entityId) && $entityId > 0
	)
	{
		$scopeOperationsSite = SiteType::getOperationsForSite($entityId);
		if ($scopeOperationsSite !== null)
		{
			return array_values($scopeOperationsSite);
		}
	}

	$operations = [];
	$operationsDefault = [];
	$wasChecked = false;
	$uid = self::getContextUserId();
	$extendedMode = self::isExtendedMode();

	// full access for admin
	if (
		$uid &&
		self::isOn() &&
		!self::isAdmin() &&
		self::isFeatureOn() &&
		self::exist()
	)
	{
		$wasChecked = true;
		$entityIdFilter = $entityId;
		if (is_array($entityIdFilter))
		{
			$entityIdFilter[] = 0;
		}
		else
		{
			$entityIdFilter = [
				$entityIdFilter, 0
			];
		}
		$filter = [
			'ENTITY_ID' => $entityIdFilter,
			'=ENTITY_TYPE' => $entityType,
			'USER_ACCESS.USER_ID' => $uid,
			'!TASK_OPERATION.OPERATION.NAME' => false
		];
		if ($extendedMode)
		{
			$filter['ROLE_ID'] = 0;
		}
		else
		{
			$filter['ROLE_ID'] = Role::getExpectedRoleIds();
		}
		$res = RightsTable::getList(
			[
				'select' => [
					'ENTITY_ID',
					'OPERATION_NAME' => 'TASK_OPERATION.OPERATION.NAME'
				],
				'filter' => $filter
			]
		);
		while ($row = $res->fetch())
		{
			if ($row['ENTITY_ID'] == 0)
			{
				$operationsDefault[] = mb_substr($row['OPERATION_NAME'], 8);
				continue;
			}
			if (!isset($operations[$row['ENTITY_ID']]))
			{
				$operations[$row['ENTITY_ID']] = array();
			}
			$operations[$row['ENTITY_ID']][] = mb_substr($row['OPERATION_NAME'], 8);
			$operations[$row['ENTITY_ID']] = array_unique($operations[$row['ENTITY_ID']]);
		}
	}

	// set full rights, if rights are empty
	foreach ((array) $entityId as $id)
	{
		if (!isset($operations[$id]))
		{
			if ($wasChecked && !$extendedMode)
			{
				$operations[$id] = !empty($operationsDefault)
					? $operationsDefault
					: [self::ACCESS_TYPES['denied']];
			}
			else
			{
				$operations[$id] = array_values(self::ACCESS_TYPES);
			}
		}
	}

	return is_array($entityId)
			? $operations
			: $operations[$entityId];
}

Добавить комментарий