Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
vinegredz

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

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}

 

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

Share this post


Link to post

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

Share this post


Link to post

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

 

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

Share this post


Link to post

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

Share this post


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

Все верно.

 

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

$table->sortBy

Share this post


Link to post

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

 

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

Share this post


Link to post

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

 

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

 

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

Share this post


Link to post

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

Share this post


Link to post

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

Share this post


Link to post

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

Share this post


Link to post

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

Share this post


Link to post

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

 

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

 

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

Edited by TemKa_SD

Share this post


Link to post

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

 

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

 

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

 

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

 

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

 

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

Share this post


Link to post

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

Share this post


Link to post

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

 

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

Share this post


Link to post

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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...