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.