Como permito que os usuários cancelem a publicação e publiquem seu próprio conteúdo?

30

Quero permitir que os usuários cancelem a publicação e publiquem seu próprio conteúdo. Por padrão, você precisa conceder permissão "administrar nós" para que os usuários possam cancelar a publicação ou publicação de conteúdo. Essa é a maneira mais ampla. Desejo permitir que os usuários cancelem a publicação ou publiquem um nó, se e somente se eles o criaram. Isso também significa que eles devem poder visualizar nós não publicados se e somente se o tiverem criado.

Chaulky
fonte

Respostas:

20

Uma abordagem de interface do usuário que eu usei em alguns sites é o módulo Override Node Options , adiciona permissões semelhantes às que minha outra resposta fornece, além de várias outras.

Decifrar
fonte
Esta parece ser a abordagem mais simples ... e atualmente está funcionando para mim. Obrigado!
Chaulky 9/03/11
Este é o melhor que você pode permitir publicar e pegajosa, sem administrar nodes :)
Alex Weber
Parece um ótimo módulo para lidar com esse problema.
Zilverdistel 29/04
20

Sempre usamos o módulo Publicar conteúdo para isso. Ele adiciona várias permissões refinadas e uma guia de publicação / publicação nos nós.

Este módulo

  • permite permissões granulares de publicação e publicação:
    • global (cancelar / publicar qualquer conteúdo)
    • por "tipo de nó" (des / publique qualquer conteúdo [tipo de nó])
    • por usuário (des / publique o próprio conteúdo [tipo de nó]
  • adiciona uma guia "Publicar / Cancelar publicação" à página do nó para desabilitar / publicar com um clique.
  • expõe links de publicação / publicação para suas visualizações, facilitando a otimização de fluxos de trabalho para revisores, editores e editores.
  • é leve e sempre será.
Marcvangend
fonte
9

Eu recomendo usar o módulo de revisão, que oferece alguns benefícios sobre os métodos acima. É claro que é um módulo totalmente mantido e, portanto, haverá muitos olhos no código e muitas correções de bugs. Segundo, você terá mais recursos para ajustar isso ao seu fluxo de trabalho geral.

Para o seu caso de uso, concede aos usuários as permissões "criador" e "moderador", para que eles possam moderar seu próprio conteúdo, mas, como diz a descrição do módulo, eles não recebem poderes de Deus, como " nós de administração 'daria.

coderintherye
fonte
Esta é uma opção muito interessante, mas há muito mais do que eu preciso. Embora eu esteja feliz por saber disso, posso pensar em outros sites que seriam úteis.
Chaulky 9/03/11
6

Há um módulo que faz isso, mas não consigo lembrar o nome. Na verdade, eu senti que a abordagem adotada pelo módulo era muito complicada, tinha muito código quando o código importante era apenas uma linha quebrada com alguma lógica de permissão.

Esta é a minha versão do código:

function MYMODULE_perm() {
  $perms[] = 'administer status of any content';

  foreach (node_get_types() as $type) {
    if (isset($type->type)) {
      $perms[] = 'administer status of any '. check_plain($type->type) .' content';
      $perms[] = 'administer status of own '. check_plain($type->type) .' content';
    }
  }

  return $perms;
}

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'node-form' && $form_id == "{$form['#node']->type}_node_form" && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}

Isso adiciona algumas permissões extras que permitem que os usuários publiquem / cancelem a publicação de seu próprio ou todo o tipo de conteúdo e todos os tipos de conteúdo, defina como desejar.

Decifrar
fonte
Obrigado, isso parece muito bom, faz sentido. Mas que tal ver o conteúdo não publicado? Se eles não podem vê-lo, como a publicará?
Chaulky
Se isso não afetar o IIRC, um usuário poderá ver seu conteúdo não publicado, independentemente de possuir ou não 'nós de administração'.
Decipher
3

Eu só quero atualizar a resposta do Decipher, o que me parece a melhor abordagem, se você não quiser adicionar outro módulo, adequado ao Drupal 7:

/**
 * Implements hook_permission().
 */
function MYMODULE_permission() {  
  $perms = array(
    'administer status of any content' => array(
      'title' => t('Administer status for all content type'),
      'description' => t(''),
      'restrict access' => true
    ),
  );

  foreach (node_type_get_types() as $type) {
    if (isset($type->type)) {
      $perm_types = array(
        'administer status of any '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of any '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),

        'administer status of own '. check_plain($type->type) .' content' => array(
          'title' => t('Administer status of own '. check_plain($type->type) .' content'),
          'description' => t(''),
        ),
      );
      $perms = array_merge($perms,$perm_types);
    }
  }

  return $perms;
}


function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if (preg_match('/_node_form$/', $form_id) && _MYMODULE_access($form['#node']->type)) {
    if ($form['options']['#access'] == FALSE) {
      $form['options']['#access'] = TRUE;
    }
  }
}

function _MYMODULE_access($type) {
  return user_access('administer status of any content')
      || user_access('administer status of any ' . check_plain($type) . ' content')
      || user_access('administer status of own ' . check_plain($type) . ' content');
}
anou
fonte
há um erro de digitação. altere $ perms_type para $ perm_types - mais o status any / own não está marcado .. #
rémy
0

Você pode conseguir isso combinando o poder dos módulos Flag e Rules .

  1. Crie uma nova publicação de sinalizador e dê aos usuários permissão para sinalizar apenas seu próprio conteúdo.
  2. Em seguida, adicione uma nova regra que dispara quando um nó é sinalizado e que publica o nó sinalizado. Da mesma forma, crie uma segunda regra que cancele a publicação de nós que não são sinalizados em Publicar .
  3. Por fim, dê aos usuários permissão para ver seus próprios nós não publicados e adicione um link Publicar às páginas do nó.
Jeroen
fonte
-1

O módulo de acesso ao conteúdo deve cobrir o que você deseja.

Este módulo permite gerenciar permissões para tipos de conteúdo por função e autor. Ele permite que você especifique a visualização personalizada, edite e exclua permissões para cada tipo de conteúdo. Opcionalmente, você pode ativar as configurações de acesso por conteúdo, para personalizar o acesso para cada nó de conteúdo.

Jeremy French
fonte
1
Uma resposta vaga. Se isso é preferível à resposta de Decipher, talvez você possa elaborar os benefícios dessa abordagem?
Chris Cohen
O módulo Acesso ao Conteúdo, na verdade, não resolve o problema; ele adiciona a capacidade de definir Exibir, Editar e Excluir por função, mas não Publicar.
Decipher