web-dev-qa-db-fra.com

Comment laisser les utilisateurs annuler la publication et publier leur propre contenu?

Je souhaite laisser les utilisateurs annuler la publication et publier leur propre contenu. Par défaut, vous devez autoriser les "nœuds d'administration" pour que les utilisateurs puissent annuler la publication ou publier du contenu. C'est bien trop large. Je souhaite autoriser les utilisateurs à annuler la publication ou à publier un nœud si et seulement s’ils l’ont créé. Cela signifie également qu'ils devraient pouvoir afficher les nœuds non publiés si et seulement s'ils l'ont créé.

30
Chaulky

Une approche d'interface utilisateur que j'ai utilisée sur certains sites est le module Override Node Options , ajoute des autorisations similaires à celles que mon autre réponse fournit, plus un tas supplémentaire.

20
Decipher

Nous utilisons toujours le module Publish Content pour cela. Il ajoute un certain nombre d'autorisations affinées et un onglet de publication/annulation de publication sur les nœuds.

Ce module

  • active les autorisations granulaires de publication et de non-publication:
    • global (annuler/publier tout contenu)
    • par "type de noeud" (annuler/publier tout contenu [nodetype])
    • par utilisateur (annuler/publier son propre contenu [nodetype]
  • ajoute un onglet "Publier/Annuler la publication" à la page du nœud pour annuler/publier en un clic.
  • expose les liens de publication/dépublication de vos vues, ce qui facilite la rationalisation des flux de travail pour les réviseurs, les éditeurs et les éditeurs.
  • est léger et le sera toujours.
20
marcvangend

Je recommanderais d'utiliser Revisioning Module qui vous offre quelques avantages par rapport aux méthodes ci-dessus. L'un est bien sûr qu'il s'agit d'un module entièrement maintenu et donc il y aura beaucoup de regards sur le code et de nombreuses corrections de bugs. Deuxièmement, vous obtiendrez plus de fonctionnalités pour l'adapter à votre flux de travail global.

Pour votre cas d'utilisation, donne à vos utilisateurs à la fois les autorisations de "créateur" et les autorisations de "modérateur", afin qu'ils puissent essentiellement modérer leur propre contenu, mais comme indiqué dans la description du module, ils ne le sont pas des pouvoirs divins donnés tels que donner des "nœuds d'administration" donneraient.

9
coderintherye

Il y a un module qui fait ça, mais je ne me souviens plus très bien du nom. En fait, je pensais que l'approche du module était trop lourde, il y avait beaucoup de code alors que le code important n'était qu'une seule ligne enveloppée d'une logique d'autorisation.

Voici ma version du code:

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

Cela ajoute quelques autorisations supplémentaires qui vous permettent d'autoriser les utilisateurs à publier/dé-publier leur propre ou tout un type de contenu, et tous les types de contenu, définissez comment vous le souhaitez.

6
Decipher

Je veux juste mettre à jour la réponse Decipher, qui me semble la meilleure approche si vous ne voulez pas ajouter un autre module, pour s'adapter à 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');
}
3
anou

Vous pouvez y parvenir en combinant la puissance des modules Flag et Rules .

  1. Créer un nouveau drapeau Publier et autoriser les utilisateurs à ne marquer que leur propre contenu.
  2. Ensuite, ajoutez une nouvelle règle qui se déclenche lorsqu'un nœud est marqué et qui publie le nœud marqué. De même, créez une deuxième règle qui annule la publication des nœuds qui ne sont pas signalés sous Publier .
  3. Enfin, donnez aux utilisateurs la permission de voir leurs propres nœuds non publiés et ajoutez un lien Publier aux pages du nœud.
0
Jeroen