Как разрешить пользователям отменять публикацию и публиковать собственный контент?

30

Я хочу разрешить пользователям отменять публикацию и публиковать собственный контент. По умолчанию вы должны разрешить пользователям «администрировать узлы», чтобы иметь возможность отменять публикацию или публиковать контент. Это путь к широкой, хотя. Я хочу разрешить пользователям отменять публикацию или публиковать узел, если и только если они его создали. Это также означает, что они должны иметь возможность просматривать неопубликованные узлы, если и только если они их создали.

Chaulky
источник

Ответы:

20

Подход к пользовательскому интерфейсу, который я использовал на некоторых сайтах, - это модуль Override Node Options , который добавляет разрешения, аналогичные тем, которые предоставляет мой другой ответ, плюс кучу дополнительных.

Расшифруйте
источник
Кажется, это самый простой подход ... и в настоящее время он работает для меня. Благодарность!
Чалки
Это лучшее, что вы можете позволить публиковать и прикреплять без администрирования узлов :)
Алекс Вебер
Похоже, отличный модуль для решения этой проблемы.
Зилвердистел
20

Для этого мы всегда используем модуль публикации контента . Он добавляет ряд детальных разрешений и вкладку публикации / отмены публикации на узлах.

Этот модуль

  • разрешает детализированные разрешения на публикацию и отмену публикации:
    • глобальный (удалить / опубликовать любой контент)
    • за «тип узла» (удалить / опубликовать любой контент [nodetype])
    • на пользователя (un / publish собственный контент [nodetype])
  • добавляет вкладку «Опубликовать / отменить публикацию» на страницу узла для одноразового нажатия / публикации.
  • предоставляет возможность публиковать / отменять публикацию ссылок на ваши представления, что упрощает рационализацию рабочих процессов для рецензентов, редакторов и издателей.
  • легкий и всегда будет.
marcvangend
источник
9

Я бы порекомендовал использовать Revisioning Module, который дает вам несколько преимуществ по сравнению с вышеуказанными методами. Один из них, конечно, заключается в том, что это полностью поддерживаемый модуль, и поэтому он будет внимательно следить за кодом и множеством исправлений ошибок. Во-вторых, вы получите больше возможностей, чтобы вписать это в ваш общий рабочий процесс.

Для вашего случая использования дает вашим пользователям как разрешения «создателя», так и разрешения «модератора», чтобы они могли в основном модерировать свой собственный контент, но, как сказано в описании модуля, им не предоставляются божественные полномочия, такие как Администрирование узлов "дало бы.

coderintherye
источник
Это очень интересный вариант, но там гораздо больше, чем мне нужно. Хотя я рад, что знаю об этом, знаю, я могу подумать о некоторых других сайтах, которые могут пригодиться.
Чолки,
6

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

Это моя версия кода:

function MYMODULE_perm() {
  $perms[] = 'administer status of any content';

  foreach (node_get_types() as $type) {
    if (isset($type->type)) {
      $perms[] = 'administer status of any '. check_plain($type->type) .' content';
      $perms[] = 'administer status of own '. check_plain($type->type) .' content';
    }
  }

  return $perms;
}

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'node-form' && $form_id == "{$form['#node']->type}_node_form" && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}

Это добавляет несколько дополнительных разрешений, которые позволяют вам разрешать пользователям публиковать / отменять публикацию своего или всего типа контента, а также всех типов контента.

Расшифруйте
источник
Спасибо, это выглядит довольно хорошо, имеет смысл. А как насчет возможности просмотра их неопубликованного контента? Если они не могут просмотреть это, как публикация это?
Чалки
Это не должно влиять на то, что IIRC пользователь может видеть свой неопубликованный контент, независимо от того, есть ли у него «узлы администрирования».
Расшифруй
3

Я просто хочу обновить ответ Decipher, ведь мне кажется, что лучший подход, если вы не хотите добавлять другой модуль, подходит для Drupal 7:

/**
 * Implements hook_permission().
 */
function MYMODULE_permission() {  
  $perms = array(
    'administer status of any content' => array(
      'title' => t('Administer status for all content type'),
      'description' => t(''),
      'restrict access' => true
    ),
  );

  foreach (node_type_get_types() as $type) {
    if (isset($type->type)) {
      $perm_types = array(
        'administer status of any '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of any '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),

        'administer status of own '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of own '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),
      );
      $perms = array_merge($perms,$perm_types);
    }
  }

  return $perms;
}


function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if (preg_match('/_node_form$/', $form_id) && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}
Anou
источник
есть опечатка. изменить $ perms_type до $ perm_types - плюс любой / собственный статус не проверено ..
Rémy
0

Вы можете достичь этого, комбинируя мощь модулей Флаг и Правила .

  1. Создайте новый флаг Публикация и дайте пользователям разрешение помечать только их собственный контент.
  2. Затем добавьте новое правило, которое срабатывает, когда узел помечен, и публикует помеченный узел. Точно так же создайте второе Правило, которое отменяет публикацию узлов, которые не помечены при публикации .
  3. Наконец, дайте пользователям разрешение на просмотр своих неопубликованных узлов и добавьте ссылку « Опубликовать» на страницы узла.
Йерун
источник
-1

Модуль доступа к контенту должен охватывать то, что вы хотите.

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

Джереми Френч
источник
1
Немного расплывчатого ответа. Если это предпочтительнее, чем ответ Дешифера, возможно, вы могли бы подробнее остановиться на преимуществах этого подхода?
Крис Коэн
Модуль Content Access на самом деле не решает проблему, он добавляет возможность устанавливать View, Edit и Delete по ролям, но не Publish.
Расшифровка