Вы здесь

Как программно ограничить доступ к определенному блоку?

0

Как программно по определенной логике можно разграничить доступ к просмотру блока.
Например на основе значения поля профиля пользователя, а именно есть блок созданный вьювс,
он отображается какие нибудь заказы, нужно сделать так, чтобы блок отображался только пользователям
у которых в поле ПОДРАЗДЕЛЕНИЕ профиля было значение 100.

Версия Drupal: 
7.x
Категория: 
Access controlBlock API
Вопрос задан 04.11.2018 - 01:21

Ответы

0
/**
 * Implements hook_block_list_alter().
 */
function hook_block_list_alter(&$blocks) {
  $bid = 123;

  if (!isset($blocks[$bid]) || !isset($blocks[$bid]->theme) || !isset($blocks[$bid]->status) || $blocks[$bid]->theme != $GLOBALS['theme_key'] || $blocks[$bid]->status != 1) {
    return;
  }

  if ($GLOBALS['user']->field_name['und'][0]['value'] != 100) {
    unset($blocks[$bid]);
  }
}
Ответ дан 04.11.2018 - 10:26
Аватар пользователя xandeadx
xandeadx
1527

Большое спасибо! То что нужно, параллельно вышел на ваш пост в вашем блоге.
Однако почему то у меня в данной реализации не работает до конца.
Поменял id блока на свой (взял из базы)
И поправил проверку на значение поля (поле в базе это поле типа текст с машинным именем field_user_department_number
Сделал по следующему:

  if ($GLOBALS['user']->field_user_department_number['und'][0]['value'] == 100) {
    unset($blocks[$bid]);
  }

Как я понял в данном случае, если значение поля field_user_department_number текущего пользователя равно 100, то блок должен исчезнуть, однако он не исчезает.
Если меняю условие == на != - аналогично не исчезает (кэш сбрасывал)

Комментарий оставлен 04.11.2018 - 12:47

Смотрите что в value, что на выходе в $blocks.

Комментарий оставлен 04.11.2018 - 16:42