Permiso "Ver contenido no publicado" para no autor

18

Busqué en Google un poco para ver si hay una forma de nivel de permiso para permitir que un usuario registrado (pero no administrador) vea contenido no publicado (marcado con la clase CSS no publicada). Esto parece estar programado solo para Drupal 8. ¿Pero tal vez alguien fue lo suficientemente inteligente como para hacer una solución?

Tengo un rol llamado Content Editorque debería poder ver todo el contenido no publicado, independientemente de si fueron el autor o no.

Artur
fuente

Respuestas:

17

Si está bien escribiendo un módulo personalizado muy pequeño, puede usar una combinación de hook_permission()y hook_node_access()para hacer esto:

function MYMODULE_permission() {
  return array(
    'unconditionally view unpublished content' => array(
      'title' => t('Unconditionally View Unpublished Content'),
      'restrict access' => TRUE
    )
  );
}

function MYMODULE_node_access($node, $op, $account) {
  // We're only bothered about the 'view' operation at the moment
  if ($op == 'view') {
    // If the user has access to our new permission, let 'em at it
    if (user_access('unconditionally view unpublished content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  // For everything else let the system decide.
  return NODE_ACCESS_IGNORE;
}

Cualquier rol al que asigne el nuevo permiso ahora debería poder ver cualquier nodo, independientemente de si está publicado o no.

Clive
fuente
Para fortalecer un poco la seguridad, agregué && user_access('administer nodes')para que dependa de los derechos para crear contenido. Ahora no es tan "incondicional". Gracias por el ejemplo!
Artur
Sí, debería haber mencionado que es posible que desee 'aumentar' un poco :) encantado de ayudar
Clive
Grandes cosas de nuevo, Clive. ¡Esto también resuelve uno de mis problemas para restringir el acceso a los nodos con un cierto término de taxonomía!
Uwe
1
El código realmente es "ver incondicionalmente cualquier contenido". Nunca verifica si el nodo está publicado o no. O si el rol tiene permiso para ver el contenido en primer lugar.
JM01
6

Primero probé el código anterior, que es genial. Pero después de otorgar derechos sobre el contenido no publicado a un rol, ese rol aún no podía ver el contenido no publicado en las vistas, y esto puede ser muy útil para algunos roles de editores ...

Lo resolví usando el módulo view_unpublished .

Kojo
fuente
Instalé este complemento y, en lugar de resolver mi problema, no lo hizo e hizo que todo el contenido no se mostrara para el grupo de administración personalizado que hice.
mohamad salama
Bueno, lamento que hayas tenido ese comportamiento. Lo he estado usando durante un tiempo y nunca tuve tal pb con ningún rol (si querías decir que tu grupo de administración es un rol). Puede publicar en cuestión en DO entonces.
Kojo
3

Yo uso el módulo de revisión para esto. Tras la instalación, crea los siguientes permisos para cada tipo de contenido:

  • Tipo de contenido : ver revisiones de contenido propio

  • Tipo de contenido : ver revisiones del contenido de cualquier persona

  • Tipo de contenido : publicar revisiones de contenido propio

  • Tipo de contenido : publique revisiones del contenido de cualquier persona

Al dar permiso a mis editores para ver las revisiones del contenido de cualquier persona, pueden acceder y publicar todos los nodos que han sido creados o revisados ​​por otros usuarios.

Patrick Kenny
fuente
1

Esto es lo que terminé haciendo ...

Crea una 'vista de cualquier permiso de contenido' para cada tipo de nodo. Es prácticamente lo mismo que hace el módulo de nodo, pero agrega la opción adicional.

/**
 * Implements hook_permission().
 */
function MODULE_permission() {
  $perms = array();
  foreach (node_permissions_get_configured_types() as $type) {
    $info = node_type_get_type($type);
    $perms += array(
      "view $type content" => array(
        'title' => t('%type_name: View any content', array('%type_name' => $info->name)),
      )
    );
  }
  return $perms;
}

/**
 * Implements hook_node_access().
 */
function MODULE_node_access($node, $op, $account) {
  $type = is_string($node) ? $node : $node->type;

  if (in_array($type, node_permissions_get_configured_types())) {
    if ($op == 'view' && user_access('view ' . $type . ' content', $account)) {
      return NODE_ACCESS_ALLOW;
    }
  }

  return NODE_ACCESS_IGNORE;
}
MTecknology
fuente
1

Hay un módulo para Drupal 7 y Drupal 8 para eso:

View_unpublished

Este módulo le permite otorgar acceso a roles de usuario específicos para ver nodos no publicados de un tipo específico. El control de acceso es bastante granular a este respecto.

JeroenT
fuente
0

Una solución simple y razonable es utilizar el indicador 'promover a la página principal' en los nodos.

Si no tiene otro uso para este indicador, filtre sus vistas en 'promocionado a portada'. Sus editores de contenido pueden trabajar en el nodo antes de promocionarlo (mediante un enlace directo). Pero todavía no aparecerá a los visitantes del sitio, potencialmente.

Obtuvimos esa inspiración del enfoque de 'video no listado' de Youtube.

usuario18099
fuente
0

Si sólo necesita ver el contenido de una vista, desactivar SQL rewritingen Query Settingsvirtud deOther de las Vistas de interfaz de usuario.

Esto funciona para mí, ya que solo quiero que los usuarios puedan desbloquear contenido no publicado.

Niall Murphy
fuente