• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/Access/Model/UserModel.php
  • Класс: BitrixCatalogAccessModelUserModel
  • Вызов: UserModel::getPermissions
private function getPermissions(): array
{
	if ($this->permissions !== null)
	{
		return $this->permissions;
	}

	$this->permissions = [];
	$roles = $this->getRoles();

	if (empty($roles))
	{
		return $this->permissions;
	}

	$query = PermissionTable::query();

	$permissions = $query
		->addSelect("PERMISSION_ID")
		->addSelect("VALUE")
		->whereIn("ROLE_ID", $roles)
		->exec()
	;

	while ($permission = $permissions->fetch())
	{
		$permissionId = $permission["PERMISSION_ID"];
		$value = (int)$permission["VALUE"];

		$permissionDescription = PermissionDictionary::getPermission($permissionId);
		if ($permissionDescription['type'] === PermissionDictionary::TYPE_MULTIVARIABLES)
		{
			$this->permissions[$permissionId] = $this->permissions[$permissionId] ?? [];
			if (in_array(PermissionDictionary::VALUE_VARIATION_ALL, $this->permissions[$permissionId], true))
			{
				continue;
			}

			if ($value === PermissionDictionary::VALUE_VARIATION_ALL)
			{
				$this->permissions[$permissionId] = [$value];
			}
			elseif (!in_array($value, $this->permissions[$permissionId], true))
			{
				$this->permissions[$permissionId][] = $value;
			}
		}
		else
		{
			$this->permissions[$permissionId] = $this->permissions[$permissionId] ?? 0;
			if ($value > $this->permissions[$permissionId])
			{
				$this->permissions[$permissionId] = $value;
			}
		}
	}

	return $this->permissions;
}