Berechtigung "Unveröffentlichten Inhalt anzeigen" für Nichtautor

18

Ich habe ein wenig gegoogelt, um festzustellen, ob es eine Möglichkeit auf Berechtigungsstufe gibt, einem angemeldeten (aber nicht administrativen) Benutzer zu ermöglichen, unveröffentlichten Inhalt zu sehen (markiert mit der Klasse CSS Node-Unpublished). Dies scheint nur für Drupal 8 geplant zu sein. Aber vielleicht war jemand schlau genug, eine Problemumgehung durchzuführen?

Ich habe eine Rolle namens, Content Editordie in der Lage sein sollte, alle unveröffentlichten Inhalte anzuzeigen, unabhängig davon, ob sie der Autor waren oder nicht.

Artur
quelle

Antworten:

17

Wenn Sie ein sehr kleines benutzerdefiniertes Modul schreiben möchten, können Sie eine Kombination aus hook_permission()und verwenden hook_node_access(), um dies zu tun:

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

Jede Rolle, der Sie die neue Berechtigung zuweisen, sollte nun in der Lage sein, jeden Knoten anzuzeigen, unabhängig davon, ob er veröffentlicht ist oder nicht.

Clive
quelle
Zur Stärkung der Sicherheit habe ich allerdings etwas hinzugefügt, && user_access('administer nodes')so dass es auf die Rechte an Inhalten ankommt. Jetzt ist es nicht so "bedingungslos". Danke für das Beispiel!
Artur
Ja , ich habe zu erwähnen Sie ‚Rindfleisch‘ könnte wollen , dass es ein wenig nach oben :) gerne Hilfe
Clive
wieder großartige Sachen, Clive. Dies löst auch eines meiner Probleme, den Zugriff auf Knoten mit einem bestimmten Taxonomiebegriff einzuschränken !!!
uwe
1
Der Code ist wirklich "bedingungslose Anzeige von Inhalten". Es wird nie überprüft, ob der Knoten veröffentlicht ist oder nicht. Oder ob die Rolle überhaupt die Berechtigung hat, den Inhalt zu sehen.
JM01
6

Ich habe zuerst den obigen Code ausprobiert, was toll ist. Nachdem einer Rolle Rechte für unveröffentlichten Inhalt zugewiesen wurden, konnte diese Rolle in Ansichten noch keinen unveröffentlichten Inhalt anzeigen. Dies kann für einige Editoren sehr hilfreich sein.

Ich habe es mit dem Modul view_unpublished gelöst .

Kojo
quelle
Ich habe dieses Plugin installiert und anstatt mein Problem zu lösen, wurden nicht alle Inhalte für die von mir erstellte benutzerdefinierte Admin-Gruppe angezeigt.
Mohamad Salama
Nun, es tut mir leid, dass Sie ein solches Verhalten hatten. Ich benutze es seit einer Weile und hatte noch nie eine solche Pb mit einer Rolle (wenn Sie damit gemeint haben, dass Ihre Admin-Gruppe eine Rolle ist). Sie können die Ausgabe dann in DO veröffentlichen .
Kojo
3

Ich benutze dafür das Revisionsmodul . Bei der Installation werden die folgenden Berechtigungen für jeden Inhaltstyp erstellt:

  • Inhaltstyp : Revisionen des eigenen Inhalts anzeigen

  • Inhaltstyp : Anzeigen von Überarbeitungen des Inhalts einer beliebigen Person

  • Inhaltstyp : Veröffentlichen Sie Revisionen des eigenen Inhalts

  • Inhaltstyp : Veröffentlichen Sie Revisionen des Inhalts einer beliebigen Person

Durch die Erlaubnis meiner Redakteure, Revisionen von Inhalten anderer anzuzeigen, können sie auf alle Knoten zugreifen und diese veröffentlichen, die von anderen Benutzern erstellt oder überarbeitet wurden.

Patrick Kenny
quelle
1

Das habe ich letztendlich gemacht ...

Für jeden Knotentyp wird eine Berechtigung zum Anzeigen beliebiger Inhalte erstellt. Es ist so ziemlich das Gleiche wie das Knotenmodul, fügt jedoch die zusätzliche Option hinzu.

/**
 * 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
quelle
1

Dafür gibt es ein Modul für Drupal 7 und Drupal 8:

View_unpublished

Mit diesem Modul können Sie bestimmten Benutzerrollen Zugriff gewähren, um unveröffentlichte Knoten eines bestimmten Typs anzuzeigen. Die Zugangskontrolle ist in dieser Hinsicht ziemlich detailliert.

JeroenT
quelle
0

Unter Bezugnahme auf das offizielle Administrationshandbuch: https://drupal.org/node/1106606 ist das von Kojo vorgeschlagene Modul view_unpublished eine schnelle und einfache Lösung.

xaa
quelle
0

Eine einfache, sinnvolle Lösung besteht darin, das Flag "Zur Startseite hochstufen" auf den Knoten zu verwenden.

Wenn Sie diese Flagge nicht anderweitig verwenden, filtern Sie Ihre Ansichten nach "Zur Startseite befördert". Ihre Inhaltseditoren können den Knoten bearbeiten, bevor er heraufgestuft wird (über einen direkten Link). Möglicherweise wird es den Besuchern der Website jedoch noch nicht angezeigt.

Wir haben diese Inspiration von Youtube's 'nicht gelistetem Video' Ansatz erhalten.

user18099
quelle
0

Wenn Sie nur die Inhalte in einer Ansicht zu sehen, deaktivieren Sie SQL rewritingin Query Settingsunter Otherin den Ansichten UI.

Dies funktioniert für mich, da ich nur möchte, dass Benutzer unveröffentlichte Inhalte deaktivieren können.

Niall Murphy
quelle