Comment puis-je permettre aux utilisateurs de dépublier et de publier leur propre contenu?

drupal.stackexchange https://drupal.stackexchange.com/questions/193

  •  16-10-2019
  •  | 
  •  

Question

Je veux permettre aux utilisateurs de dépublier et de publier leur propre contenu. Par défaut, vous devez donner « administer noeuds » l'autorisation pour les utilisateurs de pouvoir dépublier ou publier du contenu. C'est ainsi à large bien. Je veux permettre aux utilisateurs de publier ou dépublier un noeud si et seulement si elles ont créé. Cela signifie également qu'ils devraient être en mesure d'afficher des noeuds non publiés si et seulement si elles ont créé.

Était-ce utile?

Autres conseils

Nous utilisons toujours le Publier module de contenu pour cela. Il ajoute un certain nombre d'autorisations à grains fins et une publication / onglet dépublier sur les nœuds.

  

Ce module

     
      
  • permet granuleuse publier et autorisations UNPUBLISH:   
        
    • global (un / publier tout contenu)
    •   
    • par "type de noeud" (un / publier un contenu [nodetype])
    •   
    • par utilisateur (un / publier votre propre contenu [nodetype]
    •   
  •   
  • ajoute un onglet « Publier / Dépublier » à la page de noeud pour un seul clic un / publication.
  •   
  • expose publication / liens UNPUBLISH à votre point de vue, le rendant facile aux flux de travail pour rationaliser réviseurs, rédacteurs en chef et éditeurs.
  •   
  • est léger et sera toujours.
  •   

Je vous recommande d'utiliser le Revisioning Module qui vous donne quelques avantages par rapport aux méthodes ci-dessus. L'un est bien sûr qu'il est un module entièrement maintenu et donc il y aura beaucoup d'yeux sur le code et beaucoup de corrections de bugs. Deux, vous obtiendrez plus de fonctionnalités pour adapter ce dernier dans votre flux de travail global.

Pour votre cas d'utilisation, permet à vos utilisateurs à la fois les autorisations « créateur » et les permissions « modérateur », donc ils peuvent essentiellement modérer leur propre contenu, mais comme dit dans la description du module, ils sont pas donné comme dieu des pouvoirs tels que donner « nœuds de Administrez » donnerait.

Il y a un module qui fait cela, mais je ne me souviens pas tout à fait le nom. Je sentais que l'approche du module a été trop lourd, il y avait beaucoup de code lorsque le code réel était important de ne vraiment une ligne enveloppée avec une logique d'autorisation.

Ceci est 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 de permettre aux utilisateurs de publier / dépublier leur propre ou tout d'un type de contenu, et tous les types de contenu, ensemble la façon dont vous le souhaitez.

Je veux juste mettre à jour la réponse Decipher, coutures de sorcière pour moi la meilleure approche si vous ne voulez pas ajouter un autre module pour Drupal 7 pour adapter:

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

Le module d'accès au contenu devrait 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 la vue personnalisée, éditer et autorisations de suppression pour chaque type de contenu. En option, vous pouvez activer par les paramètres d'accès au contenu, de sorte que vous pouvez personnaliser l'accès pour chaque noeud contenu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à drupal.stackexchange
scroll top