Como restringir o acesso direto aos nós?

12

Como restringir o acesso direto aos nós, mas apenas permitir que as visualizações acessem o campo necessário do tipo de nó específico?

Por exemplo, no Views Slideshow, estamos deslizando o campo de imagem que pertence a um tipo de nó específico. Mas não queremos que os mecanismos de pesquisa acessem e os visitantes acessem os nós pertencem a esse tipo de nó.

Alguma sugestão?

Fahad Ur Rehman
fonte

Respostas:

12

Uma solução simples seria não publicar os nós que você não deseja que sejam acessíveis. As visualizações ainda podem extrair os dados desses nós.

googletorp
fonte
1
Tão simples? Não existe uma solução muito simples. Complexidade não é um objetivo em si, é? Talvez a resposta de Googletorp não resolva seu problema específico, mas nesse caso você precisará ser mais elaborado e explicar por que não.
Marcvangend 11/09/11
@marcvangend Embora seja tarde, mas percebi que essa não é a resposta da minha pergunta. Espero que alguém pode adicionar uma resposta melhor
Fahad Ur Rehman
@Fahad Para obter melhores respostas, você precisa fazer melhores perguntas. A resposta de Googletorp parece uma boa solução para mim, e os votos positivos parecem concordar. Se isso não resolver o seu problema, entre e edite sua pergunta, adicionando todos os detalhes relevantes.
marcvangend
@marcvangend, na verdade, meu problema foi resolvido e aceitei a resposta mais cedo, mas à luz do seu comentário. Googletorps tem uma reputação muito alta, não faz diferença se eu aceito ou não sua resposta. Ele forneceu uma excelente solução alternativa pela qual eu também o votei.
Fahad Ur Rehman
@ Faa Por aceitação, você está dizendo uma resposta: esta resposta resolveu meu problema. É uma declaração poderosa e muito útil para os visitantes, para descobrir se uma resposta é útil ou não. Se minha resposta não resolveu seu problema, você deve editar sua pergunta e postar alguns detalhes sobre por que minha solução não funciona para você. Como Marcvangend disse, adicione mais detalhes.
googletorp
3

Se cancelarmos a publicação de nós adicionados pelo usuário1, eles não poderão ser editados por nenhum outro usuário, mesmo que o usuário tenha o direito de editar o conteúdo desse tipo de conteúdo.

Restringir exibição de página de nó parece ser uma maneira melhor de restringir o acesso direto a qualquer nó de tipo de conteúdo específico.

O uso também é bastante simples; você só precisa ativar este módulo e configurar as permissões para os nós diretamente acessíveis normalmente.

http://drupal.org/project/restrict_node_page_view

Na página do projeto:

Você já usou um tipo de nó de apresentação de slides que precisa ser publicado, mas não deseja que o nó seja acessível por si só usando o caminho node / XXX? Este módulo é para você!

Com este módulo, você pode desativar o acesso direto às páginas do nó (nó / XXX) com base nos tipos de nó e nas permissões.

Ative o módulo e não esqueça de configurar suas permissões.

Fahad Ur Rehman
fonte
1

Um outro módulo que faz a mesma coisa, mas com mais funcionalidades.

Toca do Coelho

Os mantenedores deste projeto solicitam ao "Restringir exibição de página de nó" o mantenedor para mesclar projetos em problemas.

Vantagens contra "Restringir exibição de página de nó":

  • A mesma funcionalidade principal no nó, mas extensível a usuários / arquivos / termos de taxonomia
  • Pode ser usado no seu módulo
  • Pode ser global para o tipo de conteúdo ou para todo conteúdo
  • Veja mais na página do projeto ...

Desvantagem contra "Restringir exibição de página do nó":

  • Mais código, possivelmente menos eficaz (precisa de testes, não comprovado)
Payou
fonte
1

você deve usar node_access(), existem certas opções que você pode implementar facilmente usando hook_node_access(). A implementação node_access()permite que você tome uma decisão sobre quem pode acessar um nó e quem pode criar, excluir, editar ou atualizar esse nó. As visualizações, no entanto, ainda podem extrair dados desses nós.

hook_node_access () , node_access ()

gauravjeet
fonte
0

Inspirado em https://www.drupal.org/project/restrict_node_page_view, você pode escrever um pequeno módulo:

/**
 * 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;
}
leymannx
fonte
Este módulo já foi mencionado alguns anos atrás. Você poderia explicar o que sua nova resposta traz ao assunto?
Mołot 19/08/2015
@ Mołot - ... para escrever um módulo você mesmo. Resposta editada.
Leymannx
0

Usando o módulo Rules , você pode implementar uma regra semelhante a esta:

{ "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" } }
    ]
  }
}

A regra acima (ainda) não leva em consideração a aplicação da "ação" apenas às funções selecionadas (por exemplo, para que os administradores ainda possam usar esses caminhos para visualizar um nó). Mas para alguém um pouco familiarizado com o módulo Regras, essa é uma "Condição" direta a ser adicionada ...

Para experimentar essa regra em seu próprio site, basta copiar todo o código de Regras acima e colá-lo em uma nova regra em seu próprio site, criada através da função "Importar". Depois edite / refine para ajustá-lo ao seu próprio ambiente (por exemplo, a mensagem "Desculpe, ..." será exibida).

Pierre.Vriens
fonte