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

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

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

  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"?

Share this post


Link to post
Share on other sites

Нужно в \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

Share this post


Link to post
Share on other sites

Спасибо. Вот решение. В указанный файл в строку номер 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'] );

  };

};

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

Share this post


Link to post
Share on other sites
10 часов назад, vinegredz сказал:

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

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

Share this post


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

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...