2014-02-05 5 views
0

У меня есть проблема с разрешениями в Drupal. Я хочу, чтобы пользователи могли создавать определенный тип узла, но есть два разных пути, которым я должен предоставить им разрешения, чтобы позволить им это делать. Тип контента создан модуль под названием isbn2node, и есть два способа сделать контент через него, каждый с различными путями:Разрешения пользователя Drupal и типы нечетного содержимого

?=node/add/isbn2node-book 

?=node/add/isbn2node_book/isbn2node 

Один имеет подчеркивание, а другой имеет дефис. Первый путь ведет к форме, которая позволяет пользователям вводить информацию в книгу вручную; второй путь позволяет им вводить ISBN, ищет его и заполняет форму для них на основе результатов.

Я изменил разрешения в меню «Люди», чтобы они могли вручную добавлять содержимое книги isbn2node, используя первый путь, но нет возможности разрешить им использовать второй метод. Сглаживание URL-адреса, чтобы он не имел node/add в пути, тоже не работал.

Создание дублированного типа содержимого кажется уродливым решением; есть ли более элегантный способ позволить пользователям получить доступ к этому второму пути?

ответ

0

Небольшой код в пользовательском модуле с использованием hook_node_access должен это сделать.

$ node является либо узловым, либо машинным именем типа содержимого, на котором выполняется проверка доступа (если узел создается, то объект $ node недоступен, поэтому вместо него будет строка).

Так что это следует сделать это:

function MY_MODULE_node_access($node, $op, $account) { 
    if ($op == 'create') { 
     $type = $node; 
     if($type == 'book' && $account->uid) return NODE_ACCESS_ALLOW; 
    } 
} 
+0

бит $ account-> uid только подтверждает, что пользователь, если зарегистрировался в –

+0

Спасибо! Это звучит как приятное и опрятное решение. Первая быстрая попытка реализовать это вызвала у меня ошибку: 'Примечание: попытка получить свойство не-объекта ... Но я уверен, что это мое плохое; Я отвечу, когда вернусь домой и отчитаюсь. – nikobelia

+0

Я обновил свой ответ - $ node не является объектом при создании $ op. –

0

Я понял это, и вопросы, которые я имел, были специфическими для данного типа контента. Модуль ISBN2Node требует, чтобы пользователи имели разрешение администрирующих узлов для использования функций поиска и массового импорта.

Существует дополнительный код для секций hook_permission и hook_menu модуля, представленных в качестве исправления в модуле issues thread.

+0

Чтение этого потока Я бы сказал, что лучшим решением может быть использование hook_menu_alter в вашем собственном модуле, а не вносить изменения в модуль isbn. Таким образом, если обновление для модулей isbn произойдет, ваши изменения не будут потеряны. –

Смежные вопросы