Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
vinegredz

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

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

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

 

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

 

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

 

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

 

{{$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 я сказать не могу, не работал с ними.

Поделиться сообщением


Ссылка на сообщение
06/09/19 18:12 (изменено)

Товарищи, борюсь с задачей все еще. Подскажите, почему не работает сортировка по полю '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

Поделиться сообщением


Ссылка на сообщение
06/10/19 02:49 (изменено)

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

 

$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 пользователей

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

×
×
  • Создать...