Permissão "Visualizar conteúdo não publicado" para não autor

18

Pesquisei um pouco no Google para ver se há uma maneira no nível de permissão para permitir que um usuário conectado (mas não administrador) veja conteúdo não publicado (marcado com a classe não publicada no nó CSS). Parece estar agendado apenas para o Drupal 8. Mas talvez alguém tenha sido esperto o suficiente para fazer uma solução alternativa?

Eu tenho uma função nomeada Content Editorque deve poder ver todo o conteúdo não publicado, independentemente de ser o autor ou não.

Artur
fonte

Respostas:

17

Se você estiver bem escrevendo um módulo personalizado muito pequeno, poderá usar uma combinação de hook_permission()e hook_node_access()fazer isso:

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;
}

Qualquer função à qual você atribui a nova permissão agora deve poder exibir qualquer nó, independentemente de ser publicado ou não.

Clive
fonte
Para reforçar um pouco a segurança, acrescentei, && user_access('administer nodes')para que dependa dos direitos de criação de conteúdo. Agora não é tão "incondicional". Obrigado pelo exemplo!
Artur
Sim, eu deveria ter mencionado que você pode querer melhorar um pouco :) prazer em ajudar
Clive
grandes coisas de novo, Clive. Isso resolve um dos meus problemas, além de restringir o acesso aos nós com um determinado termo de taxonomia !!!
Uwe
11
O código é realmente "visualizar qualquer conteúdo incondicionalmente". Ele nunca verifica se o nó está publicado ou não. Ou se a função tiver permissão para ver o conteúdo em primeiro lugar.
JM01 30/08
6

Eu tentei o código acima, o que é ótimo. Mas, depois de conceder direitos a um conteúdo não publicado para uma função, essa função ainda não conseguiu ver o conteúdo não publicado nas visualizações, e isso pode ser muito útil para algumas funções de editores ...

Eu o resolvi usando o módulo view_unpublished .

Kojo
fonte
Eu instalei este plug-in e, em vez de resolver meu problema, ele não fez nem fez todo o conteúdo não exibido para o grupo de administradores personalizado que eu criei.
mohamad salama
Bem, me desculpe, você teve esse comportamento. Eu já o uso há algum tempo e nunca tive esse pb com nenhuma função (se você quis dizer que seu grupo de administradores é uma função). Você pode publicar um problema no DO então.
Kojo
3

Eu uso o módulo Revisioning para isso. Após a instalação, ele cria as seguintes permissões para cada tipo de conteúdo:

  • Tipo de conteúdo : visualize revisões do próprio conteúdo

  • Tipo de conteúdo : visualize revisões do conteúdo de qualquer pessoa

  • Tipo de conteúdo : publique revisões do próprio conteúdo

  • Tipo de conteúdo : publique revisões do conteúdo de qualquer pessoa

Ao dar aos meus editores permissão para visualizar revisões do conteúdo de qualquer pessoa, eles podem acessar e publicar todos os nós que foram criados ou revisados ​​por outros usuários.

Patrick Kenny
fonte
1

Foi isso que acabei fazendo ....

Ele cria uma 'exibição de qualquer permissão de conteúdo' para cada tipo de nó. É praticamente o mesmo que o módulo do nó, mas adiciona a opção extra.

/**
 * 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
fonte
1

Existe um módulo para Drupal 7 e Drupal 8 para isso:

View_unpublished

Este módulo permite conceder acesso a funções de usuário específicas para visualizar nós não publicados de um tipo específico. O controle de acesso é bastante granular a esse respeito.

JeroenT
fonte
0

Consultando o guia oficial de administração: https://drupal.org/node/1106606, o módulo view_unpublished sugerido por Kojo é uma solução rápida e fácil.

xaa
fonte
0

Uma solução simples e razoável é usar o sinalizador 'promover para a primeira página' nos nós.

Se você não tiver outro uso para esse sinalizador, filtre suas visualizações em 'promovido para a primeira página'. Seus editores de conteúdo podem trabalhar no nó antes de ele ser promovido (usando um link direto). Mas ainda não aparecerá para os visitantes do site, potencialmente.

Nós nos inspiramos na abordagem de 'vídeo não listado' do YouTube.

user18099
fonte
0

Se você só precisa ver o conteúdo de um ponto de vista, disable SQL rewritingem Query Settingssob Otheras vistas de interface do usuário.

Isso funciona para mim, pois eu só quero que os usuários possam desmarcar conteúdo não publicado.

Niall Murphy
fonte