Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.

Как сделать запрос без учета прав доступа?

Здравствуйте.

 

Подскажите, как можно сделать запрос базе данных без учета прав доступа?

 

У меня есть база данных в которой пользователи могут видеть только свои записи.

 

И есть код, который выводит в нужном мне месте список записей из этой базы данных:

 

{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array( array('field_7 = ? and field_57 = ?', $record->_id, 'none' ) ));}}
{{$table->tableTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'categoryTable');}}
{{$table->rowsTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'recordRow');}}
{$table|raw}

 

Конечно, этот код выводит список записей с учетом прав доступа, а я не могу разобраться на каком этапе срабатывает фильтр, который отсекает все записи в которых авторизованный юзер не является автором. Подскажите, как вообще делаются запросы без учета прав доступа?

Рекомендованные сообщения

\system\Helpers\Table\Content.php

	/**
 * Constructor
 *
 * @param	string					$class				Content Class Name
 * @param	\IPS\Http\Url			$baseUrl			Base URL
 * @param	array|null				$where				WHERE clause (To restrict to a node, use $container instead)
 * @param	\IPS\Node\Model|NULL	$container			The container
 * @param	bool|null				$includeHidden		Flag to pass to getItemsWithPermission() method for $includeHiddenContent, defaults to NULL
 * @param	string|NULL				$permCheck			Permission key to check
 * @param	bool					$honorPinned		Show pinned topics at the top of the table
 * @param	bool					$showMovedLinks		Show moved links in the result set.
 * @param	NULL|callable			$callback			Method to call to prepare the returned rows
 * @return	void
 */
public function __construct( $class, \IPS\Http\Url $baseUrl, $where=NULL, \IPS\Node\Model $container=NULL, $includeHidden=\IPS\Content\Hideable::FILTER_AUTOMATIC, $permCheck='view', $honorPinned=TRUE, $showMovedLinks=FALSE, $callback=NULL )

6-ой параметр

  • Автор

Спасибо, разобрался и даже чуть больше знаю теперь как всем этим управлять. Вот решение для тех, кто будет после меня:

 

{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array( array('field_7 = ? and field_57 = ?', $record->_id, 'none' ) ), NULL, NULL, NULL);}}
{{$table->tableTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'categoryTable');}}
{{$table->rowsTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'recordRow');}}
{$table|raw}

 

Здесь нужно было в первой строке добавить ", NULL, NULL, NULL", тогда права доступа игнорируются и на странице выводятся все записи из базы данных, даже если в настройках базы данных указано, что юзеры не могут видеть чужих записей.

  • Автор

А я же правильно понял что в function __construct нет аргумента для порядка сортировки записей?

А я же правильно понял что в function __construct нет аргумента для порядка сортировки записей?

Все верно.

 

Можете сами задать через

$table->sortBy

  • Автор

Спасибо. Вот решение для тех, кто будет после меня.

 

{{$table->sortDirection =  \IPS\Request::i()->sortdirection ? $rows->sortDirection : 'asc';}}

  • Автор

И снова вынужден вернуться в вопрос. Как из этого:

 

{{$table->sortDirection =  \IPS\Request::i()->sortdirection ? $rows->sortDirection : 'asc';}}

 

Сделать случайный порядок вывода записей из базы данных?

Случайный порядок отобраных записей или случайные записи? Выбор случайных записей не самый оптимальный sql запрос с точки зрения производительности.

  • Автор

Именно случайный порядок вывода. То есть мне нужно получить все записи из базы данных, но вывести их на странице в случайном порядке. RAND() мне не подойдет.

Нужно получить массив из бд и перемещать его в php в случайном порядке. Параметрами сортировки в запросе можно если только отбираются конкретные записи по ид. Сделать такое можно попрбовать через join, но для этого нужно писать кастомный sql запрос. Как он сочитается с таблицами IPS я сказать не могу, не работал с ними.

  • 5 недель спустя...
  • Автор

Товарищи, борюсь с задачей все еще. Подскажите, почему не работает сортировка по полю 'field_19'?

 

{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array( array('field_7 = ? and field_57 = ?', $record->_id, 'none' ) ), NULL, NULL, NULL);}}
{{$table->tableTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'categoryTable');}}
{{$table->rowsTemplate = array(\IPS\cms\Theme::i()->getTemplate('face_listing', 'cms', 'database'), 'recordRow');}}
{{$table->sortDirection =  \IPS\Request::i()->sortdirection ? $table->sortDirection : 'desc';}}
{{$table->sortBy = \IPS\Request::i()->sortby ? $table->sortBy : 'field_19';}}
{{$table->limit = 32;}}
{$table|raw}

 

Пробовал и так ,как в документации, но все равно не работает:

 

{{$table->sortBy = $table->sortBy ?: 'field_19';}}
{{$table->sortDirection = $table->sortDirection ?: 'desc';}}

Изменено пользователем vinegredz

Попробуйте так:

 

$table->sortBy = $table->sortBy ?: 'field_19';

 

Ой, вы пробовали. А как что именно не работает? Не изменяется порядок записей совсем?

Изменено пользователем TemKa_SD

  • Автор

Да, порядок вывода записей просто не меняется при смене колонки в:

 

{{$table->sortBy = \IPS\Request::i()->sortby ? $table->sortBy : 'field_19';}}

 

Но меняется, при смене направления сортировки в:

 

{{$table->sortDirection =  \IPS\Request::i()->sortdirection ? $table->sortDirection : 'desc';}}

 

По этой причине я более менее уверен в синтаксисе, но ощущение, что забыл какой-то дополнительный параметр (хотя опять таки в документации я его не заметил).

 

Если что, field_19 это колонка с числовым содержимым, стороковых данных в нем нет.

В "контентовых" таблицах сортировать можно только по определенным опциям, которые указаны в $table->sortOptions

  • Автор

Спасибо. Вот работающий код сортировки по кастомному полю:

 

{{$table->sortOptions = array( 'field_19' );}}
{{$table->sortBy = 'field_19';}}
{{$table->sortDirection = 'desc';}}

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.