Come può un utente accedere a un solo nodo specifico e non a tutti i nodi di quel tipo?


10

Ho un utente con diritti di visualizzazione e modifica per un tipo di contenuto specifico. Ciò dà il privilegio a tutti gli utenti di visualizzare e modificare tutti i nodi di quel tipo. Ma in realtà, voglio creare per ogni utente un nodo univoco, in modo che solo quell'utente possa visualizzarlo e modificarlo. Come posso farlo in Drupal 7?


1
Intendi come puoi farlo usando un modulo o come puoi farlo scrivendo il codice necessario?
kiamlaluno

Un altro modo è rifiutare il nodo usando ed estendere il profilo utente per campi.
y.teck

Sembra che questo nodo per utente possa soddisfare una sorta di requisito del profilo utente. Deve essere un nodo separato o non sarebbe meglio estendere l'entità utente stessa con campi aggiuntivi?
Alfred Armstrong,

Drupal 7 ha rimosso le autorizzazioni di visualizzazione del nodo per utente. Puoi riportarli con questo modulo drupal.org/project/node_view_permissions
giorgio79

utilizzare il modulo "nodeaccess" link è drupal.org/project/nodeaccess, vorrei che ti
potesse

Risposte:


11

Utilizzando un modulo esistente, puoi farlo con Content Access , che (se usato insieme a ACL ) consente di impostare le autorizzazioni per accedere a un nodo per ciascun utente.
Ciò significa che è necessario impostare manualmente le autorizzazioni di accesso per ciascun nodo.

Se si creano manualmente i nodi e si desidera essere sicuri che solo l'utente impostato come proprietario del nodo sia in grado di visualizzarlo (e modificarlo), è possibile creare un modulo personalizzato (ovvero un modulo che è utilizzato per il tuo sito) e implementalo hook_node_access()come segue (il codice è stato scritto per facilitarne la lettura):

function mymodule_node_access($node, $op, $account) {
  // We are interested to existing objects. When the node is being created, Drupal passed the node type instead of the node object. 
  if (is_object($node)) {
    $bool = (
      ($node->type == 'the node type you need to check') && 
      (($op == 'view') || ($op == 'update'))
    );
    if ($bool) {
      if ($account->uid == $node->uid) {
        return NODE_ACCESS_ALLOW;
      }
      else {
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;
}

Utilizzando questa implementazione hook, non è necessario modificare manualmente le autorizzazioni di accesso fornite per ciascun nodo del tipo di contenuto creato. Anche la modifica del proprietario del nodo sarebbe più semplice, poiché non è necessario modificare le autorizzazioni di accesso di quel nodo; il codice concederebbe automaticamente l'aggiornamento e visualizzerebbe le autorizzazioni per l'utente impostato come proprietario (o autore) del nodo.


5

Non è necessario alcun modulo speciale o codice personalizzato per farlo. Basta creare manualmente quei nodi, impostare utenti appropriati come proprietario (autore) dei nodi e impostare le autorizzazioni per questo tipo di contenuto per modificare solo il proprio contenuto (non modificare alcun contenuto di questo tipo) e il gioco è fatto.


1

Quello di cui stai parlando è il controllo dell'accesso al nodo Drupal, che è un argomento enorme.

Il supporto integrato del core per il controllo dell'accesso ai nodi è piuttosto ovvio e per controllare l'accesso per visualizzare un nodo per ruolo, è necessario utilizzare una sorta di modulo di controllo dell'accesso ai nodi. C'è una pagina su Drupal.org che elenca tutti i moduli di accesso ai nodi , con una recensione di capsule di ciascuno. Ti suggerisco di dare un'occhiata a quella pagina per vedere se riesci a trovare un modulo adatto per controllare l'accesso.

Il modulo Flexi Access sembra essere il modulo più adatto alle tue esigenze, in quanto la sua funzione principale è quella di permetterti di controllare l'accesso per i singoli utenti, piuttosto che per ruolo o termine di tassonomia.

È un piccolo modulo che consente di impostare ACL (elenchi di controllo di accesso) per singoli utenti. È fondamentalmente un'interfaccia utente per il modulo ACL , quindi è necessario installarlo anche.

Manca alcune delle funzionalità dei moduli di controllo degli accessi più avanzati, come l' accesso ai contenuti , ma è attivamente gestito e al momento non ci sono bug aperti nella sua coda di problemi.

Divulgazione: sono il manutentore di Flexi Access.

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.