drupal 8 – ¿Hay alguna forma de agregar concesiones de nodos a usuarios anónimos?

Pregunta:

Quiero que los usuarios anónimos puedan acceder a los nodos que se promocionan a la página principal. (No pueden acceder a los nodos que no están promocionados). Parece que hook_node_access() no parece ser llamado para usuarios anónimos. Intenté usar hook_node_grants() y hook_node_access_records() , pero el código que estoy usando no parece dar a los usuarios anónimos acceso a los nodos promocionados a la página principal.

function myModule_node_grants(\Drupal\Core\Session\AccountInterface $account, $op) {
   return ['show_promoted_news' => [9999]];
}

function myModule_node_access_records(\Drupal\node\NodeInterface $node) {

  $grants = [];

  if ($node->isPublished() and $node->isPromoted() and $node->getType() == 'article') {
    $grants[] = [
      'realm'        => 'show_promoted_news',
      'gid'          => 9999,
      'grant_view'   => 1,
      'grant_update' => 0,
      'grant_delete' => 0,
      'langcode'     => 'en'
    ];
  }

  return $grants;
} 

El permiso de acceso al contenido anula las concesiones que otorgo a los usuarios anónimos, que no pueden acceder al contenido publicado. Agregar una mayor prioridad no hace nada.

Me veo obligado a permitir que los usuarios anónimos accedan al contenido y anularlo cuando no quiero que tengan acceso con hook_node_access() .

Respuesta:

Puede hacer que esto funcione utilizando el módulo Grupo . A continuación se muestran algunos detalles sobre cómo hacerlo.

1. Configuración

  • Cree un tipo de grupo (elija el nombre que desee).
  • Para este caso, no hay necesidad de roles de grupo especiales (personalizados) para el tipo de grupo que creó. Ya que podrá configurar lo que quiera usando estos Roles Globales Especiales (codificados) que vienen con el módulo de Grupo (no pueden ser definidos por el administrador de Drupal, y siempre están disponibles para cualquier Tipo de Grupo):

    • " Forastero ": un usuario que inició sesión y que no se unió a un grupo.
    • " Miembro ": un usuario que inició sesión y que se unió a un grupo.
    • " Anónimo ": un usuario que no ha iniciado sesión.
  • Cree un grupo (elija el nombre que desee) para el tipo de grupo que creó, y digamos que lo nombra "Nodos promocionados" (no dude en utilizar otro nombre si lo prefiere).

  • Otorgue los permisos de grupo adecuados para el tipo de grupo configurado. Para hacerlo, también puede configurar para cada tipo de contenido qué rol de grupo tiene qué tipo de acceso (= ninguno, ver, crear, editar, eliminar). Tenga en cuenta: aunque esto se parece a la configuración de permisos de Drupal, estos permisos de grupo no son los mismos permisos (son específicos del módulo de grupo). Con la configuración anterior en su lugar, simplemente otorgue acceso de "visualización" al rol global especial llamado Anónimo (y elija los derechos que desee para los otros roles).

2. Otorgar acceso

Con la configuración del módulo de grupo anterior en su lugar, todo lo que necesita hacer es:

  • asignar cada nodo promocionado al grupo "Nodos promocionados".
  • elimine el nodo del grupo nuevamente si ya no se promociona.

Sin duda, esta asignación / eliminación se puede hacer manualmente (siempre que se edita un nodo), pero debería ser sencillo automatizarlo de alguna manera usando "promocionado o no" como disparador para hacerlo (usando la API que viene con el módulo de grupo ).

Más información

Consulte " ¿Cómo crear colecciones de contenido a las que puedan acceder usuarios con varios niveles de acceso? " Para obtener más información sobre todo esto.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım