Разработка

Проверка прав доступа к ноде

Тестируя новый проект проверяешь доступность того или иного материала пользователю с различными правами. И иногда утыкаешься в ситуацию, что пользователь должен видеть материал, а видит фигу жуткую картинку «доступ запрещён». Я расскажу, как смотреть права доступа к определённой ноде.

Нам понадобятся модули:

Импортируйте код Views:

$view = new view;
$view->name = 'check_permissions';
$view->description = '';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 3.0-alpha1;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
 
/* Display: По умолчанию */
$handler = $view->new_display('default', 'По умолчанию', 'default');
$handler->display->display_options['access']['type'] = 'none';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['exposed_form']['options']['submit_button'] = 'Применить';
$handler->display->display_options['exposed_form']['options']['reset_button_label'] = 'Сбросить';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['expose']['items_per_page_label'] = 'Пунктов на страницу';
$handler->display->display_options['pager']['options']['expose']['offset_label'] = 'Пропустить';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
/* Поле: Пользователь: Роли */
$handler->display->display_options['fields']['rid']['id'] = 'rid';
$handler->display->display_options['fields']['rid']['table'] = 'users_roles';
$handler->display->display_options['fields']['rid']['field'] = 'rid';
$handler->display->display_options['fields']['rid']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['rid']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['rid']['alter']['trim'] = 0;
$handler->display->display_options['fields']['rid']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['rid']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['rid']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['rid']['alter']['html'] = 0;
$handler->display->display_options['fields']['rid']['hide_empty'] = 0;
$handler->display->display_options['fields']['rid']['empty_zero'] = 0;
$handler->display->display_options['fields']['rid']['type'] = 'ul';
/* Фильтр: Материал: Nid */
$handler->display->display_options['filters']['nid']['id'] = 'nid';
$handler->display->display_options['filters']['nid']['table'] = 'node';
$handler->display->display_options['filters']['nid']['field'] = 'nid';
$handler->display->display_options['filters']['nid']['exposed'] = TRUE;
$handler->display->display_options['filters']['nid']['expose']['operator'] = 'nid_op';
$handler->display->display_options['filters']['nid']['expose']['label'] = 'Материал: Nid';
$handler->display->display_options['filters']['nid']['expose']['use_operator'] = FALSE;
$handler->display->display_options['filters']['nid']['expose']['identifier'] = 'nid';
$handler->display->display_options['filters']['nid']['expose']['optional'] = TRUE;
$handler->display->display_options['filters']['nid']['expose']['remember'] = FALSE;
$handler->display->display_options['filters']['nid']['expose']['single'] = TRUE;
 
/* Display: Страница */
$handler = $view->new_display('page', 'Страница', 'page_1');
$handler->display->display_options['defaults']['exposed_form'] = FALSE;
$handler->display->display_options['exposed_form']['type'] = 'input_required';
$handler->display->display_options['exposed_form']['options']['submit_button'] = 'Применить';
$handler->display->display_options['exposed_form']['options']['reset_button_label'] = 'Сбросить';
$handler->display->display_options['exposed_form']['options']['text_input_required'] = 'Установите фильтры и нажмите кнопку «показать» для отображения результатов ';
$handler->display->display_options['exposed_form']['options']['text_input_required_format'] = '1';
$handler->display->display_options['defaults']['filters'] = FALSE;
/* Фильтр: Материал: Nid */
$handler->display->display_options['filters']['nid']['id'] = 'nid';
$handler->display->display_options['filters']['nid']['table'] = 'node';
$handler->display->display_options['filters']['nid']['field'] = 'nid';
$handler->display->display_options['filters']['nid']['exposed'] = TRUE;
$handler->display->display_options['filters']['nid']['expose']['operator'] = 'nid_op';
$handler->display->display_options['filters']['nid']['expose']['label'] = 'Материал: Nid';
$handler->display->display_options['filters']['nid']['expose']['use_operator'] = FALSE;
$handler->display->display_options['filters']['nid']['expose']['identifier'] = 'nid';
$handler->display->display_options['filters']['nid']['expose']['optional'] = TRUE;
$handler->display->display_options['filters']['nid']['expose']['remember'] = FALSE;
$handler->display->display_options['filters']['nid']['expose']['single'] = TRUE;
$handler->display->display_options['path'] = 'chk_nid';

У вас будет страница /chk_nid которая будет принимать nid ноды и выдавать роли пользователей, которые имеют права её смотреть.

Выдача не учитывает права на правку/удаление ноды

 
 
01.06.2011 — 08:51

Комментарии (7)

Аватар пользователя Anonym
01.06.2011 — 13:55
0
 
 

А зачем? Если я в админке выставил права для ноды, я уверен, что пользователи её увидят, не?

Аватар пользователя graker
01.06.2011 — 13:59
0
 
 

Не, если используются модули тонкой работы с правами доступа, особенно совместно — могут быть конфликты и осложнения. Напр. OG + Workflow access + ACL какой-нибудь + еще что-нибудь самописное :)

Аватар пользователя graker
01.06.2011 — 13:55
2
 
 

Хм, а если включить devel и поставить пару галочек, модуль будет выводить подробную таблицу доступа к ноде по всем realm-ам сразу после вывода самой ноды.

Аватар пользователя brainstorm
01.06.2011 — 14:03
0
 
 

эту штуковину бы не view сделать а отдельным php скриптиком

Аватар пользователя Stan
01.06.2011 — 14:09
0
 
 

Да тут как кому удобно, а по-хорошму, надо сделать модулем.

Аватар пользователя brainstorm
01.06.2011 — 18:35
-1
 
 

не надо модулем. мелочь а для сайта рабочего лишняя.

ща гляну как это можно по-русски на PHP.
UPDATE.
на самом деле все довольно неоднознано. у нас OG стоит. и там своя система доступа при просмотре. ей могут быть роли фиолетовы.

Аватар пользователя brainstorm
01.06.2011 — 19:24
-1
 
 

да. таки там простым скриптом не выйдет — там db_rewrite_sql идет для таких целей.