Показываем поле Views для пользователей определенных ролей

11 марта 2014 - 18:24

Задача – показывать поля view только для пользователей определенной роли (или нескольких ролей).

Решить задачу конечно можно, создав несколько идентичных представлений (блоков или страниц), а затем ограничить их вывод по ролям. Но все же, на мой взгляд, проще с этой целью написать небольшой модуль и в нем имплементировать нужный хук модуля Views (см. документацию по API модуля Views). Итак, приступим.

Создадим модуль (подробнее о разработке модуля для Друпал я писал в статье о работе с Variable). Назовем его, например, My Views. Содержимое файла my_views.info будет таким:

name = My Views
description = Implements Views module hooks
package = Custom modules
core = 7.x

В основном файле модуля my_views.module имплементируем хук hook_views_pre_render(), который вызывается уже после выполнения и обработки запроса к базе данных сайта. Допустим, мы хотим выводить поле с машинным именем field_secret_field только для администраторов. Задачу решает код:

<?php
/**
 * Implements hook_views_pre_render().
 */

function my_views_views_pre_render(&$view) {
  global $user;
  if ($view -> name == 'my_view' && !in_array('administrator', $user -> roles)) {
    unset($view -> field['field_secret_field']);
  }
}

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