Перейти к публикации
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.

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

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

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

Пытаюсь ограничить доступ пользователей к разным записям в базе данных. Вот, что я сделал:

  1. Добавил поле "Partner ID" в профиль пользователя (тип число) со значением, например, "3"
  2. Добавил поле "Partner ID" (тип число) в базу данных
  3. Создал новую запись в базе данных, указав значение поля "Partner ID" равное 3

Мне нужно сделать так, чтобы в шаблон recordRow (который является циклом перебирающим строки из базы данных) попадали только те записи, у которых поле "Partner ID" совпадает со значением в профиле авторизованного пользователя. Сейчас я могу сделать вот так:

{{if $row->customFieldDisplayByKey('partner') != \IPS\Member::loggedIn()->profileFields()['core_pfieldgroups_1']['core_pfield_3']}}
Доступ запрещен
{{else}}
Доступ разрешен
{{endif}}

Но проблема в том, что это "пост фильтр". То есть в таблице у пользователя будут присутствовать строки к которым нет доступа и бывают ситуации, когда на одной странице у пользователя нет доступа ни к одной из записей. Вопрос: как повлиять на то, что попадает в $rows любой базы данных, чтобы на уровень раньше (а не в шаблоне вывода строк) добавить фильтр по значению поля "Partner ID"?

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

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

Нужно в \system\Helpers\Table\Content.php вносить изменения

	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 )

Проверяете класс ($class) и добавляете условие в $where

Опубликовано:
  • Автор

Спасибо. Вот решение. В указанный файл в строку номер 319 добавляем такой код:

// Сортируем, только если авторизованный пользовать НЕ админ
if(\IPS\Member::loggedIn()->isAdmin() == False) {

  // Сортировка только для записей из базы данных с ID1
  if($class == 'IPS\cms\Records1') {

	// Показывать только те записи, у которых поле с ID32 совпадает со значением поля в профиле пользователя
  	$where[] = array( 'field_32=?', \IPS\Member::loggedIn()->profileFields()['core_pfieldgroups_1']['core_pfield_3'] );

  };

};

Мне как-то сыкотно оригинальные файлы редактировать. Как внести эти правки, чтобы они при обновлении не затерлись?

Опубликовано:
10 часов назад, vinegredz сказал:

Как внести эти правки, чтобы они при обновлении не затерлись?

Создайте плагин.

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

Сейчас на странице 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.