Wie kann ich zulassen, dass Benutzer ihre eigenen Inhalte freigeben und veröffentlichen?

30

Ich möchte Benutzern erlauben, ihre eigenen Inhalte zu veröffentlichen. Standardmäßig müssen Sie den Benutzern die Berechtigung "Knoten verwalten" erteilen, um die Veröffentlichung von Inhalten aufzuheben oder zu veröffentlichen. Das ist aber viel zu breit. Ich möchte Benutzern die Freigabe oder Veröffentlichung eines Knotens nur dann gestatten, wenn sie ihn erstellt haben. Dies bedeutet auch, dass sie unveröffentlichte Knoten nur dann anzeigen können sollten, wenn sie sie erstellt haben.

Chaulky
quelle

Antworten:

20

Ein UI-Ansatz, den ich auf einigen Sites verwendet habe, ist das Modul Knotenoptionen überschreiben . Es fügt Berechtigungen hinzu, die denen meiner anderen Antwort ähneln, und ein paar zusätzliche.

Entziffern
quelle
Dies scheint der einfachste Ansatz zu sein ... und er funktioniert derzeit für mich. Vielen Dank!
Chaulky
Dies ist das Beste, da Sie Publizieren & Sticky ohne Administrationsknoten zulassen können :)
Alex Weber
Sieht nach einem großartigen Modul aus, um dieses Problem zu lösen.
Silberdistel
20

Dafür verwenden wir immer das Modul " Inhalt veröffentlichen" . Es werden eine Reihe detaillierter Berechtigungen und eine Registerkarte zum Veröffentlichen / Aufheben der Veröffentlichung für Knoten hinzugefügt.

Dieses Modul

  • Aktiviert granulare Berechtigungen zum Veröffentlichen und Aufheben der Veröffentlichung:
    • global (Inhalte entfernen / veröffentlichen)
    • pro "Knotentyp" ([Knotentyp] -Inhalt entfernen / veröffentlichen)
    • pro Benutzer (eigenen Inhalt [nodetype] entfernen / veröffentlichen)
  • Fügt der Knotenseite eine Registerkarte "Veröffentlichen / Veröffentlichen aufheben" hinzu, um das Veröffentlichen mit einem Klick aufzuheben.
  • Offenlegung von Links zum Veröffentlichen / Aufheben der Veröffentlichung für Ihre Ansichten, um die Arbeitsabläufe für Prüfer, Redakteure und Verleger zu optimieren.
  • ist leicht und wird es immer sein.
marcvangend
quelle
9

Ich würde die Verwendung des Revisionsmoduls empfehlen, das Ihnen gegenüber den oben genannten Methoden einige Vorteile bietet. Eines davon ist natürlich, dass es sich um ein vollständig gewartetes Modul handelt und daher viele Augen auf den Code und zahlreiche Fehlerkorrekturen gerichtet sind. Zweitens erhalten Sie weitere Funktionen, die Sie in Ihren gesamten Workflow integrieren können.

Vergeben Sie Ihren Benutzern für Ihren Anwendungsfall sowohl die Ersteller- als auch die Moderatorberechtigungen, damit sie im Grunde genommen ihren eigenen Inhalt moderieren können. Wie in der Modulbeschreibung angegeben, erhalten sie jedoch keine gottähnlichen Befugnisse wie "Geben". Knoten verwalten würde geben.

coderintherye
quelle
Dies ist eine sehr interessante Option, aber es steckt viel mehr drin, als ich brauche. Obwohl ich froh bin, dass ich davon weiß, kann ich mir einige andere Websites vorstellen, die sich als nützlich erweisen würden.
Chaulky
6

Es gibt ein Modul, das dies tut, aber ich kann mich nicht ganz an den Namen erinnern. Ich hatte das Gefühl, dass der Ansatz des Moduls zu umständlich war. Es enthielt viel Code, wenn der eigentliche wichtige Code nur eine einzige Zeile war, die mit einer Berechtigungslogik umhüllt war.

Dies ist meine Version des Codes:

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

Das fügt ein paar zusätzliche Berechtigungen hinzu, mit denen Sie Benutzern erlauben können, ihren eigenen Inhaltstyp oder den eines gesamten Inhaltstyps zu veröffentlichen / die Veröffentlichung aufzuheben, und mit allen Inhaltstypen können Sie festlegen, wie Sie möchten.

Entziffern
quelle
Danke, das sieht ganz gut aus, macht Sinn. Was ist mit der Möglichkeit, ihren unveröffentlichten Inhalt anzuzeigen? Wenn sie es nicht sehen können, wie wird es veröffentlicht?
Chaulky
Sollte sich dies nicht auswirken, kann der IIRC-Benutzer seinen nicht veröffentlichten Inhalt anzeigen, unabhängig davon, ob er über Administrationsknoten verfügt.
entziffern
3

Ich möchte nur die Antwort von Decipher aktualisieren, was für mich der beste Ansatz ist, wenn Sie kein weiteres Modul hinzufügen möchten, um für Drupal 7 zu passen:

/**
 * 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');
}
anou
quelle
da ist ein Tippfehler. Ändere $ perms_type in $ perm_types - außerdem wird der Status any / own nicht überprüft.
Rémy
0

Sie können dies erreichen, indem Sie die Leistung der Module Flag und Rules kombinieren .

  1. Erstelle ein neues Flag veröffentlichen und geben den Benutzern die Erlaubnis nur Flagge ihre eigenen Inhalte.
  2. Fügen Sie als Nächstes eine neue Regel hinzu, die ausgelöst wird, wenn ein Knoten markiert ist und den markierten Knoten veröffentlicht. Erstellen Sie auf ähnliche Weise eine zweite Regel, die die Veröffentlichung von Knoten aufhebt, die unter " Veröffentlichen" nicht markiert sind .
  3. Erteilen Sie den Benutzern die Berechtigung, ihre eigenen unveröffentlichten Knoten anzuzeigen, und fügen Sie den Seiten des Knotens einen Veröffentlichungslink hinzu .
Jeroen
quelle
-1

Der Zugriff auf Inhalte Modul abdecken sollte , was Sie wollen.

Mit diesem Modul können Sie Berechtigungen für Inhaltstypen nach Rolle und Autor verwalten. Sie können für jeden Inhaltstyp benutzerdefinierte Berechtigungen zum Anzeigen, Bearbeiten und Löschen festlegen. Optional können Sie die Einstellungen für den Inhaltszugriff aktivieren, um den Zugriff für jeden Inhaltsknoten anzupassen.

Jeremy French
quelle
1
Eine vage Antwort. Wenn dies der Antwort von Decipher vorzuziehen ist, könnten Sie vielleicht die Vorteile dieses Ansatzes erläutern?
Chris Cohen
Das Inhaltszugriffsmodul löst das Problem nicht wirklich. Es bietet die Möglichkeit, Anzeigen, Bearbeiten und Löschen nach Rolle festzulegen, jedoch nicht Veröffentlichen.
entziffern