Перейти к публикации
View in the app

A better way to browse. Learn more.

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

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

 

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

 

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

 

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

 

{{$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';}}

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

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.