it-swarm.it

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

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 è il modo in cui però. Voglio consentire agli utenti di annullare la pubblicazione 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.

30
Chaulky

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.

20
Decipher

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 la cancellazione/pubblicazione 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.
20
marcvangend

Consiglio di utilizzare Revisioning Module che offre alcuni vantaggi rispetto ai metodi sopra elencati. 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 tuo caso d'uso, concedi ai tuoi utenti sia le autorizzazioni "creatore" che le autorizzazioni "moderatore", in modo che possano sostanzialmente moderare il proprio contenuto, ma come indicato nella descrizione del modulo, non sono non darebbero poteri simili a quelli di un dio come dare 'amministrare nodi'.

9
coderintherye

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.

6
Decipher

Voglio solo aggiornare la risposta di Decifrazione, le streghe mi sembrano l'approccio migliore se non si desidera 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');
}
3
anou

È 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 il proprio contenuto.
  2. Successivamente, aggiungi una nuova regola che si innesca quando un nodo è contrassegnato e pubblica il nodo contrassegnato. Allo stesso modo, crea 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.
0
Jeroen