it-swarm.it

Come limitare l'accesso diretto ai nodi?

Come limitare l'accesso diretto ai nodi ma consentire solo alle viste di accedere al campo richiesto del tipo di nodo specifico?

Ad esempio in Slideshow Slideshow stiamo facendo scorrere il campo immagine che appartiene a un particolare tipo di nodo. Ma non vogliamo che i motori di ricerca accedano e che i visitatori accedano ai nodi appartengono a quel tipo di nodo.

Eventuali suggerimenti?

12
Fahad Ur Rehman

Se non pubblichiamo nodi aggiunti dall'utente1, questi non saranno modificabili da nessun altro utente anche se l'utente ha i diritti per modificare il contenuto di quel tipo di contenuto.

Limita Node Visualizzazione pagina sembra un modo migliore per limitare l'accesso diretto a qualsiasi nodo di tipo di contenuto specifico.

L'uso è anche abbastanza semplice, devi solo abilitare questo modulo e configurare le autorizzazioni per i nodi che sono direttamente accessibili normalmente.

http://drupal.org/project/restrict_node_page_view

Dalla pagina del progetto:

Hai mai usato un nodetipo di presentazione che devi pubblicare ma non vuoi che il nodo sia accessibile da solo usando il percorso nodo/XXX? Questo modulo è per te!

Con questo modulo è possibile disabilitare l'accesso diretto alle pagine dei nodi (nodo/XXX) in base a nodetipi e autorizzazioni.

Abilita il modulo e non dimenticare di configurare le tue autorizzazioni.

3
Fahad Ur Rehman

Una soluzione semplice sarebbe quella di non pubblicare i nodi a cui non si desidera essere accessibili. Le viste possono comunque estrarre i dati da quei nodi.

12
googletorp

Un altro modulo che fa la stessa cosa ma con più funzionalità.

Rabbit Hole

I manutentori di questo progetto chiedono a "Restrict Node Page View" Maintainer di unire i progetti in problemi.

Vantaggi rispetto a "Restrict Node Page View":

  • Stessa funzionalità principale sul nodo ma estendibile ai termini utenti/file/tassonomia
  • Può essere usato nel tuo modulo
  • Può essere globale per tipo di contenuto o su ogni contenuto
  • Vedi di più sulla pagina del progetto ...

Svantaggio rispetto a "Restrict Node Page View":

  • Più codice quindi probabilmente meno efficace (bisogno di test, non provato)
1
Payou

dovresti usare node_access(), ci sono alcune opzioni che puoi facilmente implementare usando hook_node_access(). L'implementazione di node_access() consente di decidere chi può accedere a un nodo e chi può creare, eliminare, modificare o aggiornare tale nodo. Le viste, tuttavia, possono comunque estrarre dati da questi nodi.

hook_node_access () , node_access ()

1
gauravjeet

Usando il modulo Rules puoi implementare una regola che assomigli a questa:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

La regola di cui sopra non tiene (ancora) in considerazione per applicare l '"azione" solo ai ruoli selezionati (ad esempio, in modo che gli amministratori possano comunque utilizzare questi percorsi per visualizzare un nodo). Ma per chiunque abbia un po 'di familiarità con il modulo Regole, questa è una "Condizione" diretta da aggiungere ...

Per sperimentare questa regola nel tuo sito, copia semplicemente l'intero codice Regole sopra e incollalo in una nuova Regola nel tuo sito, creata tramite la funzione "Importa". Quindi modifica/perfeziona ulteriormente per adattarlo al tuo ambiente (ad esempio il messaggio "Siamo spiacenti, ..." da mostrare).

0
Pierre.Vriens

Ispirato da https://www.drupal.org/project/restrict_node_page_view potresti scrivere tu stesso un piccolo modulo:

/**
 * Implements hook_node_access()
 */
function MYMODULE_node_access($node, $op, $account) {

  // Default checks
  if (!is_object($node)) {
    return NODE_ACCESS_IGNORE;
  }

  $type = is_string($node) ? $node : $node->type;

  if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {

    // Restrict access to full MYTYPE node for anon users
    if ($type == 'MYTYPE' && user_is_anonymous()) {
      return NODE_ACCESS_DENY;
    }
  }
  // Default
  return NODE_ACCESS_IGNORE;
}
0
leymannx