Autorizzazione "Visualizza contenuto non pubblicato" per non autore


18

Ho cercato su Google un po 'per vedere se esiste un modo a livello di autorizzazione per consentire a un utente connesso (ma non amministratore) di vedere contenuti non pubblicati (contrassegnati con la classe CSS non pubblicata del nodo). Questo sembra essere programmato solo per Drupal 8. Ma forse qualcuno era abbastanza intelligente da fare una soluzione?

Ho un ruolo chiamato Content Editorche dovrebbe essere in grado di vedere tutto il contenuto non pubblicato, indipendentemente dal fatto che fossero l'autore o meno.

Risposte:


17

Se stai scrivendo un modulo personalizzato molto piccolo, puoi usare una combinazione di hook_permission()e hook_node_access()per fare questo:

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

Qualsiasi ruolo a cui assegni la nuova autorizzazione dovrebbe ora essere in grado di visualizzare qualsiasi nodo, indipendentemente dal fatto che sia pubblicato o meno.


Per rafforzare un po 'la sicurezza, ho aggiunto, in && user_access('administer nodes')modo che dipenda dai diritti di creare contenuti. Ora non è "incondizionato". Grazie per l'esempio!
Artur,

Sì, avrei dovuto dirti che potresti voler "rinforzare" un po ':) felice di aiutarti
Clive

di nuovo grandi cose, Clive. Questo risolve anche uno dei miei problemi per limitare l'accesso ai nodi con un certo termine di tassonomia !!!
Uwe

1
Il codice è davvero "visualizzare incondizionatamente qualsiasi contenuto". Non controlla mai se il nodo è pubblicato o meno. O se il ruolo ha il permesso di vedere il contenuto in primo luogo.
JM01,

6

Per prima cosa ho provato il codice sopra, il che è fantastico. Ma dopo aver concesso i diritti su un contenuto non pubblicato a un ruolo, quel ruolo non è stato ancora in grado di vedere contenuti non pubblicati nelle viste, e questo può essere molto utile per alcuni ruoli degli editor ...

L'ho risolto usando il modulo view_unpublished .


Ho installato questo plug-in e invece di risolvere il mio problema, non lo ha fatto e non ha visualizzato tutti i contenuti per il gruppo di amministratori personalizzato creato.
Mohamad Salama,

Beh, mi dispiace che tu abbia avuto un simile comportamento. Lo sto usando da un po 'di tempo e non ho mai avuto un ruolo simile con nessun ruolo (se intendevi dire che il tuo gruppo di amministratori è un ruolo). È possibile pubblicare in questione in DO quindi.
Kojo,

3

Per questo uso il modulo di revisione . Al momento dell'installazione, crea le seguenti autorizzazioni per ciascun tipo di contenuto:

  • Tipo di contenuto : visualizza le revisioni del proprio contenuto

  • Tipo di contenuto : visualizza le revisioni del contenuto di chiunque

  • Tipo di contenuto : pubblica revisioni del proprio contenuto

  • Tipo di contenuto : pubblica revisioni del contenuto di chiunque

Autorizzando i miei editori a visualizzare le revisioni dei contenuti di chiunque, sono in grado di accedere e pubblicare tutti i nodi che sono stati creati o revisionati da altri utenti.


1

Questo è quello che ho finito per fare ....

Crea una "visualizzazione di qualsiasi autorizzazione sul contenuto" per ciascun tipo di nodo. È praticamente lo stesso di quello che fa il modulo del nodo, ma aggiunge l'opzione extra.

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

Esiste un modulo per Drupal 7 e Drupal 8 per questo:

View_unpublished

Questo modulo consente di concedere l'accesso a ruoli utente specifici per visualizzare nodi non pubblicati di un tipo specifico. Il controllo degli accessi è piuttosto granulare in questo senso.



0

Una soluzione semplice e ragionevole consiste nell'utilizzare il flag "Promuovi in ​​prima pagina" sui nodi.

Se non hai altro uso per questo flag, filtra le tue visualizzazioni su "promosso a frontpage". Gli editor di contenuti possono lavorare sul nodo prima che venga promosso (utilizzando un collegamento diretto). Ma non apparirà ancora ai visitatori del sito, potenzialmente.

Abbiamo tratto ispirazione dall'approccio di "video non in elenco" di Youtube.


0

Se hai solo bisogno di vedere il contenuto in una vista, disabilita SQL rewritingin Query Settingssotto Othernell'interfaccia utente di Views.

Questo funziona per me poiché desidero solo che gli utenti siano in grado di decomprimere i contenuti non pubblicati.

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.