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

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

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

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

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

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

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

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