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

drupal.stackexchange https://drupal.stackexchange.com/questions/193

  •  16-10-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

Этот модуль

  • Включает гранулированную публикацию и неопубликованные разрешения:
    • Global (un/ploblise любое контент)
    • за «Тип узла» (un/publicing любое содержание [Nodetype])
    • за пользователя (un/public
  • Добавляет вкладку «публикация/неопубликованная» на страницу узла для одного клика UN/Publishing.
  • Раскрывает публикацию/неопубликованные ссылки на ваши взгляды, позволяя оптимизировать рабочие процессы для рецензентов, редакторов и издателей.
  • легкий и всегда будет.

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

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

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

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

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

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

Я просто хочу обновить ответ Decifher, швы ведьмы мне лучший подход, если вы не хотите добавлять другой модуль, чтобы соответствовать 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');
}

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top