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.

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.


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 .


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.


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

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.



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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.