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

30

Je souhaite permettre aux utilisateurs de ne plus publier et de 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 cependant 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éé.

Chaulky
la source

Réponses:

20

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.

Déchiffrer
la source
Cela semble être l'approche la plus simple ... et cela fonctionne actuellement pour moi. Merci!
Chaulky
C'est le meilleur car vous pouvez autoriser la publication et le collage sans administrer les nœuds :)
Alex Weber
On dirait un excellent module pour traiter ce problème.
zilverdistel
20

Nous utilisons toujours le module Publier du contenu 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 de publication et de dé-publication granulaires:
    • global (annuler / publier tout contenu)
    • par "type de nœud" (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.
marcvangend
la source
9

Je recommanderais d'utiliser le module de révision 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 disposent pas de pouvoirs divins tels que donner ' administrer les nœuds »donnerait.

coderintherye
la source
C'est une option très intéressante, mais il y a bien plus que ce dont j'ai besoin. Je pensais que je suis content de le savoir, je peux penser à d'autres sites qui pourraient être utiles.
Chaulky
6

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 la totalité d'un type de contenu, et tous les types de contenu, définissez comment vous le souhaitez.

Déchiffrer
la source
Merci, ça a l'air bien, ça a du sens. Et si vous pouviez voir leur contenu non publié? S'ils ne peuvent pas le voir, comment le publiera-t-il?
Chaulky
Cela ne devrait pas affecter cela, IIRC un utilisateur peut voir son contenu non publié, qu'il ait ou non des «nœuds d'administration».
Déchiffrez
3

Je veux juste mettre à jour la réponse de 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');
}
anou
la source
il y a une faute de frappe. changer $ perms_type en $ perm_types - plus le statut any / own n'est pas vérifié ..
rémy
0

Vous pouvez y parvenir en combinant la puissance du drapeau et des règles modules .

  1. Créer un nouveau drapeau publication et autorisez les utilisateurs à ne signaler 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 marqués sous publication des Publier .
  3. Enfin, autorisez les utilisateurs à voir leurs propres nœuds non publiés et ajoutez un lien de publication aux pages du nœud.
Jeroen
la source
-1

Le module d' accès au contenu doit couvrir ce que vous voulez.

Ce module vous permet de gérer les autorisations pour les types de contenu par rôle et auteur. Il vous permet de spécifier des autorisations d'affichage, de modification et de suppression personnalisées pour chaque type de contenu. En option, vous pouvez activer les paramètres d'accès par contenu, afin de personnaliser l'accès pour chaque nœud de contenu.

Jeremy French
la source
1
Un peu d'une réponse vague. Si cela est préférable à la réponse de Decipher, peut-être pourriez-vous élaborer sur les avantages de cette approche?
Chris Cohen
Le module d'accès au contenu ne résout pas réellement le problème, il ajoute la possibilité de définir l'affichage, la modification et la suppression par rôle, mais pas la publication.
Déchiffrez