Jump to content

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


vinegredz
 Share

Recommended Posts

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

 

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

 

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

 

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

 

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

 

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

Link to comment
Share on other sites

\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-ой параметр

Link to comment
Share on other sites

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

 

{{$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", тогда права доступа игнорируются и на странице выводятся все записи из базы данных, даже если в настройках базы данных указано, что юзеры не могут видеть чужих записей.

Link to comment
Share on other sites

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

Все верно.

 

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

$table->sortBy

Link to comment
Share on other sites

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

 

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

Link to comment
Share on other sites

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

 

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

 

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 5 weeks later...

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

Edited by vinegredz
Link to comment
Share on other sites

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

 

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

 

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

Edited by TemKa_SD
Link to comment
Share on other sites

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

 

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

 

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

 

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

 

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

 

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

 

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...