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


30

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

Ответы:


20

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


Кажется, это самый простой подход ... и в настоящее время он работает для меня. Благодарность!
— Чалки

Это лучшее, что вы можете позволить публиковать и прикреплять без администрирования узлов :)
— Алекс Вебер

Похоже, отличный модуль для решения этой проблемы.
— Зилвердистел

20

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

Этот модуль

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

9

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

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


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

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');
}

есть опечатка. изменить $ perms_type до $ perm_types - плюс любой / собственный статус не проверено ..
— Rémy

0

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

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

-1

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

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


1
Немного расплывчатого ответа. Если это предпочтительнее, чем ответ Дешифера, возможно, вы могли бы подробнее остановиться на преимуществах этого подхода?
— Крис Коэн

Модуль Content Access на самом деле не решает проблему, он добавляет возможность устанавливать View, Edit и Delete по ролям, но не Publish.
— Расшифровка
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.