¿Hay alguna manera de evitar que un usuario anónimo pueda ver un nodo de un tipo de contenido específico?

9

¿Hay alguna forma de evitar que los usuarios anónimos puedan ver nodos de un tipo de contenido, como un bloque o una vista?

Puedo controlar el acceso con una vista, pero si conozco el enlace de un nodo, puedo verlo sin iniciar sesión primero.

Frank Giesecke
fuente

Respuestas:

10

Puede controlar el acceso a los nodos en el gancho hook_node_access ():

mymodule.module:

use Drupal\node\NodeInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Access\AccessResult;

function mymodule_node_access(NodeInterface $node, $op, AccountInterface $account) {
  if ($account->isAnonymous() && $node->gettype() == 'article') {
    return AccessResult::forbidden()->cachePerPermissions();
  }
  return AccessResult::neutral()->cachePerPermissions();
}

Esto controla el acceso directo al nodo, no el acceso en las vistas. Pero esto es lo que probablemente quieras.

4k4
fuente
Creo que para controlar el acceso a la vista también, usarías hook_node_grants.
Jonathan
4

Su mejor opción es usar Rabbit Hole , o Content Access cuando tenga una versión actualizada.

Madriguera del conejo

Rabbit Hole es un módulo que agrega la capacidad de controlar lo que debería suceder cuando una entidad se está viendo en su propia página. Quizás tenga un tipo de contenido que nunca debería mostrarse en su propia página, como un tipo de contenido de imagen que se muestra en un carrusel. Rabbit Hole puede evitar que este nodo sea accesible en su propia página, a través de node / xxx.

Acceso al contenido

Este módulo le permite administrar permisos para tipos de contenido por rol y autor. Le permite especificar vistas personalizadas, editar y eliminar permisos para cada tipo de contenido. Opcionalmente, puede habilitar la configuración de acceso al contenido, por lo que puede personalizar el acceso para cada nodo de contenido.

Tenga en cuenta que lo que creo que desea es bloquear todo el acceso a un nodo de un tipo de contenido, y solo Content Access lo cumplirá a través de Rabbit Hole.

Más allá de eso, creo que estaría buscando implementar su propio control de acceso si ninguno de estos es adecuado.

Kevin
fuente
Perdón por preguntar tu respuesta Kevin, pero ¿estás familiarizado con el módulo de Grupo ? Eche un vistazo al video tutorial para comprender lo que quiero decir ... Por cierto: para D7 también solía recomendar "Acceso al contenido".
Pierre.Vriens
2
No desde que era OG. ¿Un poco pesado de instalar a menos que sea necesario en ese sentido?
Kevin
" ... ya que era OG "? ¿Qué quieres decir con eso? Y sobre "pesado": ¿OG (si es así, estoy de acuerdo) o Grupo (si es así, no estoy de acuerdo)?
Pierre.Vriens
Siempre pensé que Group era un tenedor de OG para D8
Kevin
Lo siento (de nuevo) Kevin, ese no es el caso ... leer más .
Pierre.Vriens
1

Tal vez desee intentar usar el módulo Grupo , que permite crear colecciones arbitrarias de su contenido y usuarios en su sitio, y otorgar permisos de control de acceso en esas colecciones. Está disponible a partir de D7, y también tiene una versión D8. Crea grupos como entidades, haciéndolos totalmente desplegables, extensibles y exportables. Cada grupo puede tener usuarios, roles y permisos adjuntos (consulte " ¿Cuáles son los diversos roles admitidos por el módulo Grupo? " Para obtener más detalles al respecto).

Para esta pregunta específica, habilitaría el gnodesubmódulo, y para cada tipo de grupo definiría los permisos apropiados (ver, editar, eliminar, etc.) para los distintos Tipos de contenido.

Parece que desea otorgar acceso a lo que, en el Grupo, se llama "Miembros" y "Extraños" (= usuarios registrados que no son miembros de un grupo). Pero no permitiría el acceso a "Anónimo" (visitantes del sitio que no están registrados).

Recursos

Pierre.Vriens
fuente
1

Puede usar el módulo Permisos de vista de nodo .

Habilítelo y luego puede asignar qué roles pueden ver qué tipos de contenido en la ruta 'admin / people / permissions' en la sección 'Permisos de vista de nodo'


fuente