Дозвіл на перегляд неопублікованого вмісту для автора


18

Я трохи погуглився, щоб побачити, чи існує спосіб на рівні дозволу дозволити користувачеві, який увійшов (але не адміністратору) бачити неопублікований вміст (позначений класом CSS, який не публікується). Здається, це заплановано лише для Drupal 8. Але, можливо, хтось виявився досить розумним, щоб зробити обхід?

У мене є названа роль, Content Editorяка повинна мати можливість переглядати весь неопублікований контент, незалежно від того, був він автором чи ні.

Відповіді:


17

Якщо ви все в порядку пишете дуже маленький спеціальний модуль, ви можете використовувати комбінацію hook_permission()та hook_node_access()зробити це:

function MYMODULE_permission() {
  return array(
    'unconditionally view unpublished content' => array(
      'title' => t('Unconditionally View Unpublished Content'),
      'restrict access' => TRUE
    )
  );
}

function MYMODULE_node_access($node, $op, $account) {
  // We're only bothered about the 'view' operation at the moment
  if ($op == 'view') {
    // If the user has access to our new permission, let 'em at it
    if (user_access('unconditionally view unpublished content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  // For everything else let the system decide.
  return NODE_ACCESS_IGNORE;
}

Будь-яка роль, якій ви призначили новий дозвіл, тепер має змогу переглядати будь-який вузол, незалежно від того, опублікований він чи ні.


Щоб трохи посилити безпеку, хоч я додав && user_access('administer nodes')так, що це залежить від прав на створення вмісту. Зараз це не так "безумовно". Дякую за приклад!
Артур

Так, я мав би згадати, що ви можете трохи пофабрикувати :) радий допомогти
Клайв

чудові речі знову, Клайв. Це також вирішує одне з моїх питань, а також обмежувати доступ до вузлів із певним терміном таксономії !!!
uwe

1
Код насправді "безумовно переглядає будь-який вміст". Він ніколи не перевіряє, чи публікується вузол чи ні. Або якщо в ролі є дозвіл на перегляд вмісту в першу чергу.
JM01

6

Я вперше спробував код вище, що чудово. Але після надання права на неопублікований вміст на роль, ця роль все ще не може побачити неопублікований вміст у видах, і це може бути дуже корисно для деяких ролей редакторів ...

Я вирішив це за допомогою модуля view_unpublisher .


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

Ну мені шкода, що ти мала таку поведінку. Я використовую його вже деякий час і ніколи не мав такого довільного ПК із будь-якою роллю (якщо ви мали на увазі, що ваша група адміністраторів - це роль). Ви можете опублікувати випуск у DO тоді.
Коджо

3

Для цього я використовую модуль перегляду . Після встановлення він створює такі дозволи для кожного типу вмісту:

  • Тип вмісту : перегляд версій власного вмісту

  • Тип вмісту : перегляд версій вмісту будь-кого

  • Тип вмісту : опублікувати версії власного вмісту

  • Тип вмісту : публікуйте версії вмісту будь-кого

Надавши моїм редакторам дозвіл на перегляд вмісту будь-кого, вони можуть отримати доступ та опублікувати всі вузли, які були створені чи переглянуті іншими користувачами.


1

Це те, що я закінчила ...

Він створює "перегляд будь-якого дозволу на вміст" для кожного типу вузла. Це майже те саме, що робить модуль вузла, але додає додатковий варіант.

/**
 * Implements hook_permission().
 */
function MODULE_permission() {
  $perms = array();
  foreach (node_permissions_get_configured_types() as $type) {
    $info = node_type_get_type($type);
    $perms += array(
      "view $type content" => array(
        'title' => t('%type_name: View any content', array('%type_name' => $info->name)),
      )
    );
  }
  return $perms;
}

/**
 * Implements hook_node_access().
 */
function MODULE_node_access($node, $op, $account) {
  $type = is_string($node) ? $node : $node->type;

  if (in_array($type, node_permissions_get_configured_types())) {
    if ($op == 'view' && user_access('view ' . $type . ' content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  return NODE_ACCESS_IGNORE;
}

1

Для цього є модуль для Drupal 7 та Drupal 8:

Перегляд_непублікував

Цей модуль дозволяє надати доступ для певних ролей користувача для перегляду неопублікованих вузлів конкретного типу. Контроль доступу в цьому плані досить детальний.


0

Посилаючись на офіційний посібник з адміністрування: https://drupal.org/node/1106606, модуль view_unpublisher, запропонований Kojo, - це швидке та просте рішення.


0

Простий, розумний обхід полягає у використанні прапора "сприяння на передній сторінці" на вузлах.

Якщо у вас немає іншого використання для цього прапора, відфільтруйте свої погляди на "переведено на головну сторінку". Ваші редактори вмісту можуть працювати на вузлі до його просування (за допомогою прямого посилання). Але це ще не з’явиться для відвідувачів сайту, потенційно.

Ми отримали це натхнення від підходу Youtube до «невластивого відео».


0

Якщо вам потрібно переглянути лише вміст у представленні даних, відключіть його SQL rewritingв Query Settingsрозділі Otherінтерфейсу Views.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.