Come posso consentire agli utenti di annullare la pubblicazione e pubblicare i propri contenuti?


30

Voglio consentire agli utenti di annullare la pubblicazione e pubblicare i propri contenuti. Per impostazione predefinita, devi autorizzare "amministrare i nodi" affinché gli utenti possano annullare la pubblicazione o pubblicare contenuti. Questo è un modo per allargare però. Voglio consentire agli utenti di non pubblicare o pubblicare un nodo se e solo se lo hanno creato. Ciò significa anche che dovrebbero essere in grado di visualizzare nodi non pubblicati se e solo se lo hanno creato.

Risposte:


20

Un approccio UI che ho usato su alcuni siti è il modulo Override Node Options , aggiunge autorizzazioni simili a quelle fornite dall'altra mia risposta, oltre a un mucchio di extra.


Questo sembra essere l'approccio più semplice ... e attualmente sta funzionando per me. Grazie!
Chaulky

Questo è il migliore in quanto puoi consentire la pubblicazione e l'adesione senza amministrare i nodi :)
Alex Weber,

Sembra un ottimo modulo per affrontare questo problema.
zilverdistel,

20

Per questo utilizziamo sempre il modulo Pubblica contenuto . Aggiunge una serie di autorizzazioni dettagliate e una scheda di pubblicazione / non pubblicazione sui nodi.

Questo modulo

  • abilita autorizzazioni di pubblicazione e non pubblicazione granulari:
    • globale (annulla / pubblica qualsiasi contenuto)
    • per "tipo di nodo" (annulla / pubblica qualsiasi contenuto [nodetype])
    • per utente (annulla / pubblica il proprio contenuto [nodetype]
  • aggiunge una scheda "Pubblica / Non pubblicare" alla pagina del nodo per un / click con un clic.
  • espone i collegamenti di pubblicazione / non pubblicazione alle tue viste, semplificando la semplificazione dei flussi di lavoro per revisori, editori ed editori.
  • è leggero e lo sarà sempre.

9

Consiglio di utilizzare il modulo di revisione che offre alcuni vantaggi rispetto ai metodi di cui sopra. Uno ovviamente è che si tratta di un modulo completamente gestito e quindi ci saranno molti occhi sul codice e molte correzioni di bug. Due, otterrai più funzionalità per adattarlo al tuo flusso di lavoro generale.

Per il vostro caso d'uso, offre agli utenti sia le autorizzazioni "creatore" e le autorizzazioni "moderatore", in modo che possano sostanzialmente moderare i propri contenuti, ma, come dice nella descrizione del modulo, sono non dato a Dio-come potenze come dare ' amministrare i nodi 'darebbe.


Questa è un'opzione molto interessante, ma c'è molto di più di quello di cui ho bisogno. Pensato di essere contento di saperlo, posso pensare ad altri siti che potrebbero tornare utili.
Chaulky

6

C'è un modulo che lo fa, ma non riesco proprio a ricordare il nome. In realtà ho sentito che l'approccio adottato dal modulo era troppo ingombrante, aveva un sacco di codice quando l'attuale codice importante era in realtà solo una riga racchiusa con una logica di autorizzazione.

Questa è la mia versione del codice:

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

Ciò aggiunge alcune autorizzazioni extra che ti consentono di consentire agli utenti di pubblicare / annullare la pubblicazione del proprio o di tutti i tipi di contenuto e di tutti i tipi di contenuto, impostando come desideri.


Grazie, sembra piuttosto buono, ha un senso. Che dire di poter visualizzare i loro contenuti non pubblicati, però? Se non riescono a visualizzarlo, come lo pubblicheranno?
Chaulky

Non dovrebbe influire su ciò, IIRC un utente può vedere i propri contenuti non pubblicati indipendentemente dal fatto che abbiano "amministrare nodi".
Decifrare il

3

Voglio solo aggiornare la risposta di Decifrazione, le streghe mi sembrano l'approccio migliore se non vuoi aggiungere un altro modulo, per adattarsi a Drupal 7:

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

c'è un errore di battitura. cambia $ perms_type in $ perm_types - inoltre lo stato any / own non è verificato ..
rémy

0

È possibile ottenere questo risultato combinando la potenza dei moduli Flag e Rules .

  1. Crea un nuovo flag Pubblica e concedi agli utenti l'autorizzazione a contrassegnare solo i propri contenuti.
  2. Successivamente, aggiungi una nuova regola che si innesca quando un nodo è contrassegnato e pubblica il nodo contrassegnato. Allo stesso modo, creare una seconda regola che non pubblichi i nodi che non sono contrassegnati in Pubblica .
  3. Infine, concedi agli utenti l'autorizzazione a vedere i propri nodi non pubblicati e aggiungi un link Pubblica alle pagine del nodo.

-1

Il modulo di accesso al contenuto dovrebbe coprire ciò che desideri.

Questo modulo consente di gestire le autorizzazioni per i tipi di contenuto per ruolo e autore. Ti consente di specificare la visualizzazione personalizzata, modificare ed eliminare le autorizzazioni per ciascun tipo di contenuto. Facoltativamente, è possibile abilitare le impostazioni di accesso al contenuto, in modo da poter personalizzare l'accesso per ciascun nodo del contenuto.


1
Un po 'di una vaga risposta. Se questo è preferibile alla risposta di Decipher, forse potresti approfondire i vantaggi di questo approccio?
Chris Cohen,

Il modulo Accesso contenuto non risolve effettivamente il problema, ma aggiunge la possibilità di impostare Visualizza, Modifica ed Elimina per ruolo ma non Pubblica.
Decifrare il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.