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


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

 31
Author: mpdonadio, 2011-03-03

7 answers

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

 22
Author: Decipher, 2011-03-04 00:13:21

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

Этот модуль

  • включает подробные разрешения на публикацию и отмену публикации:
    • глобальный (не публиковать/публиковать любой контент)
    • для "типа узла" (отменить/опубликовать любой контент [типа узла])
    • на пользователя (отменить/опубликовать собственный контент [типа узла]
  • добавляет вкладку "Опубликовать/отменить публикацию" в страница узла для отмены/публикации одним щелчком мыши.
  • предоставляет ссылки на публикацию/отмену публикации ваших мнений, что упрощает оптимизацию рабочих процессов для рецензентов, редакторов и издателей.
  • легкий и всегда будет таким.
 20
Author: marcvangend, 2013-06-18 12:31:23

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

В вашем случае использования предоставляет вашим пользователям как разрешения "создателя", так и разрешения "модератора", чтобы они могли в основном модерировать свой собственный контент, но, как говорится в описание модуля, они не наделены богоподобными полномочиями, такими как предоставление "администрирующих узлов".

 9
Author: coderintherye, 2011-03-03 23:22:35

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

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

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

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

 6
Author: Decipher, 2011-03-03 05:26:15

Я просто хочу обновить ответ на расшифровку, и мне кажется, что это лучший подход, если вы не хотите добавлять еще один модуль, подходящий для 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');
}
 3
Author: anou, 2015-12-21 16:29:10

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

  1. Создайте новый флаг Опубликуйте и дайте пользователям разрешение помечать только свой собственный контент.
  2. Затем добавьте новое правило, которое срабатывает, когда узел помечен, и которое публикует помеченный узел. Аналогично, создайте второе правило, которое отменяет публикацию узлов, которые не помечены в разделе Публикация.
  3. Наконец, дайте пользователям разрешение просматривать свои собственные неопубликованные узлов и добавьте ссылку Опубликовать на страницы узла.
 0
Author: Jeroen, 2016-09-04 12:07:48

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

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

 -1
Author: Jeremy French, 2013-06-18 12:32:10