Zezwolenie „Wyświetl niepublikowane treści” dla osób niebędących autorami

18

Sprawdziłem trochę, czy istnieje sposób na poziomie uprawnień, aby umożliwić zalogowanemu (ale nieadministracyjnemu) użytkownikowi przeglądanie niepublikowanej treści (oznaczonej klasą CSS niepublikowana w węźle). Wydaje się, że jest to zaplanowane tylko dla Drupala 8. Ale może ktoś był na tyle sprytny, by zrobić obejście?

Mam nazwaną rolę, Content Editorktóra powinna być w stanie zobaczyć wszystkie niepublikowane treści, niezależnie od tego, czy były autorami, czy nie.

Artur
źródło

Odpowiedzi:

17

Jeśli nie masz nic przeciwko pisaniu bardzo małego niestandardowego modułu, możesz użyć kombinacji hook_permission()i hook_node_access()aby to zrobić:

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

Każda rola, do której przypisujesz nowe uprawnienie, powinna teraz móc wyświetlać dowolny węzeł, niezależnie od tego, czy jest opublikowany czy nie.

Clive
źródło
Aby trochę wzmocnić bezpieczeństwo, dodałem jednak, && user_access('administer nodes')aby zależało to od praw do tworzenia treści. Teraz nie jest to takie „bezwarunkowe”. Dzięki za przykład!
Artur
Tak, powinienem był wspomnieć, że może chcesz to trochę „wzmocnić” :) Cieszę się, że mogę pomóc
Clive
znowu świetne rzeczy, Clive. To rozwiązuje również jeden z moich problemów, ograniczając dostęp do węzłów za pomocą określonego terminu systematyki !!!
uwe
1
Kod naprawdę „bezwarunkowo przeglądaj dowolne treści”. Nigdy nie sprawdza, czy węzeł jest opublikowany, czy nie. Lub jeśli rola ma przede wszystkim uprawnienia do wyświetlania treści.
JM01,
6

Najpierw wypróbowałem powyższy kod, co jest świetne. Ale po przyznaniu uprawnień do niepublikowanej zawartości roli ta rola nadal nie widziała niepublikowanych treści w widokach, co może być bardzo przydatne w przypadku niektórych ról redaktorów ...

Rozwiązałem go za pomocą modułu view_unpublished .

Kojo
źródło
Zainstalowałem tę wtyczkę i zamiast rozwiązać mój problem, nie spowodowała, że ​​cała treść nie była wyświetlana dla niestandardowej grupy administracyjnej, którą utworzyłem.
mohamad salama
Przykro mi, że miałeś takie zachowanie. Używam go od jakiegoś czasu i nigdy nie miałem takiego PB z jakąkolwiek rolą (jeśli miałeś na myśli, że twoja grupa administracyjna jest rolą). Następnie możesz opublikować problem w DO .
Kojo
3

Używam do tego modułu rewizji . Po instalacji tworzy następujące uprawnienia dla każdego typu zawartości:

  • Typ zawartości : Wyświetl wersje własnych treści

  • Typ zawartości : Wyświetl zmiany zawartości dowolnej osoby

  • Typ zawartości : Publikuj wersje własnych treści

  • Typ zawartości : publikuj wersje dowolnych treści

Dając moim redaktorom uprawnienia do przeglądania poprawek treści dowolnej osoby, mogą oni uzyskiwać dostęp do wszystkich węzłów utworzonych lub poprawionych przez innych użytkowników i opublikować je.

Patrick Kenny
źródło
1

To właśnie skończyłem ...

Tworzy „wyświetl dowolne zezwolenie na treść” dla każdego typu węzła. Jest to prawie to samo co moduł węzła, ale dodaje dodatkową opcję.

/**
 * 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;
}
MTecknology
źródło
1

Jest do tego moduł Drupala 7 i Drupala 8:

Wyświetl_publikowane

Ten moduł umożliwia przyznanie dostępu określonym rolom użytkownika w celu przeglądania niepublikowanych węzłów określonego typu. Pod tym względem kontrola dostępu jest dość szczegółowa.

JeroenT
źródło
0

Nawiązując do oficjalnego przewodnika administracyjnego: https://drupal.org/node/1106606 moduł view_unpublished sugerowany przez Kojo jest szybkim i łatwym rozwiązaniem.

xaa
źródło
0

Prostym i rozsądnym obejściem jest użycie flagi „awansuj na pierwszą stronę” w węzłach.

Jeśli nie masz innego zastosowania dla tej flagi, przefiltruj swoje poglądy na „awansowane na pierwszą stronę”. Edytory treści mogą pracować na węźle, zanim zostanie on wypromowany (przy użyciu bezpośredniego łącza). Ale potencjalnie nie pojawi się jeszcze wśród odwiedzających witrynę.

Inspirację czerpiemy z „niepublicznego wideo” w YouTube.

użytkownik18099
źródło
0

Jeśli potrzebujesz tylko zobaczyć zawartość w widoku, wyłącz SQL rewritingw Query Settingsobszarze Otherw interfejsie użytkownika Widoki.

Działa to dla mnie, ponieważ chcę tylko, aby użytkownicy mogli odznaczyć niepublikowane treści.

Niall Murphy
źródło