¿Cómo restringir el acceso directo a los nodos?

12

¿Cómo restringir el acceso directo a los nodos pero solo permitir que las vistas accedan al campo requerido del tipo de nodo en particular?

Por ejemplo, en Views Slideshow estamos deslizando el campo de imagen que pertenece a un tipo de nodo en particular. Pero no queremos que los motores de búsqueda accedan y los visitantes accedan a los nodos que pertenecen a ese tipo de nodo.

¿Alguna sugerencia?

Fahad Ur Rehman
fuente

Respuestas:

12

Una solución simple sería no publicar los nodos a los que no desea que se pueda acceder. Las vistas aún pueden extraer los datos de esos nodos.

googletorp
fuente
1
Demasiado simple? No existe una "solución demasiado simple". La complejidad no es una meta en sí misma, ¿verdad? Quizás la respuesta de Googletorp no resuelva su problema específico, pero en ese caso tendrá que ser más elaborado y explicar por qué no.
marcvangend
@marcvangend Aunque es tarde, me he dado cuenta de que esa no es la respuesta de mi pregunta. Espero que alguien pueda agregar una mejor respuesta
Fahad Ur Rehman
@Fahad Para obtener mejores respuestas, debe hacer mejores preguntas. La respuesta de Googletorp me parece una buena solución, y los votos positivos parecen estar de acuerdo. Si no resuelve su problema, entre y edite su pregunta, agregando todos los detalles relevantes.
marcvangend
@marcvangend en realidad mi problema se resolvió y acepté la respuesta antes, pero a la luz de tu comentario. Googletorps tiene una reputación muy alta, no hay diferencia si acepto o no su respuesta. Proporcionó una excelente solución alternativa por la cual también lo voté.
Fahad Ur Rehman
@Fahad Al aceptar una respuesta, estás diciendo: esta respuesta resolvió mi problema. Es una declaración poderosa y muy útil para los visitantes que vienen, para saber si una respuesta es útil o no. Si mi respuesta no resolvió su problema, entonces debe editar su pregunta y publicar algunos detalles sobre por qué mi solución no funciona para usted y, como dijo marcvangend, agregue más detalles.
googletorp
3

Si anulamos la publicación de nodos agregados por el usuario1, ningún otro usuario podrá editarlos, incluso si el usuario tiene los derechos para editar el contenido de ese tipo de contenido.

Restringir vista de página de nodo parece una mejor manera de restringir el acceso directo a cualquier nodo de tipo de contenido específico.

El uso también es bastante simple, solo necesita habilitar este módulo y configurar los permisos para los nodos a los que se puede acceder directamente de forma normal.

http://drupal.org/project/restrict_node_page_view

Desde la página del proyecto:

¿Alguna vez ha utilizado un tipo de nodo de presentación de diapositivas que necesita ser publicado pero no desea que el nodo sea accesible por sí mismo utilizando la ruta del nodo / XXX? ¡Este módulo es para ti!

Con este módulo puede deshabilitar el acceso directo a las páginas de nodo (nodo / XXX) según los tipos de nodo y los permisos.

Habilite el módulo y no olvide configurar sus permisos.

Fahad Ur Rehman
fuente
1

Otro módulo que hace lo mismo pero con más funcionalidades.

Madriguera del conejo

Los encargados del mantenimiento de este proyecto piden "Restringir la vista de página de nodo" Mantenedor para fusionar proyectos en problemas.

Ventajas frente a "Restringir vista de página de nodo":

  • La misma funcionalidad principal en el nodo pero extensible a términos de usuarios / archivos / taxonomía
  • Se puede usar en su módulo
  • Puede ser global para el tipo de contenido o en cada contenido
  • Ver más en la página del proyecto ...

Desventaja frente a "Restringir vista de página de nodo":

  • Más código, por lo que posiblemente sea menos efectivo (se necesitan pruebas, no se ha probado)
Payou
fuente
1

debe usar node_access(), hay ciertas opciones que puede implementar fácilmente usando hook_node_access(). La implementación le node_access()permite tomar una decisión sobre quién puede acceder a un nodo y quién puede crear, eliminar, editar o actualizar dicho nodo. Sin embargo, las vistas aún pueden extraer datos de estos nodos.

hook_node_access () , node_access ()

gauravjeet
fuente
0

Inspirado por https://www.drupal.org/project/restrict_node_page_view , puede escribir un pequeño módulo usted mismo:

/**
 * 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
fuente
Este módulo ya se mencionó hace un par de años. ¿Podría explicar qué novedades aporta su respuesta al tema?
Mołot
@ Mołot - ... para escribir un módulo usted mismo. Respuesta editada
leymannx
0

Usando el módulo Reglas puede implementar una regla similar 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" } }
    ]
  }
}

La regla anterior no tiene en cuenta (todavía) para aplicar solo la "acción" solo para roles seleccionados (por ejemplo, para que los administradores puedan seguir utilizando estas rutas para ver un nodo). Pero para cualquiera que esté un poco familiarizado con el módulo Reglas, esa es una "Condición" directa para agregar ...

Para experimentar con esta regla en su propio sitio, simplemente copie todo el código de Reglas anterior y péguelo en una nueva Regla en su propio sitio, creada mediante la función "Importar". Luego edite / refine más para que se ajuste a su propio entorno (por ejemplo, se mostrará el mensaje "Lo siento, ...").

Pierre.Vriens
fuente