¿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.
¿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.
Respuestas:
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.
Su mejor opción es usar Rabbit Hole , o Content Access cuando tenga una versión actualizada.
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.
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.
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 gnode
submó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).
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'