Autorisation "Afficher le contenu non publié" pour les non-auteurs

18

J'ai googlé un peu pour voir s'il existe un moyen au niveau de l'autorisation pour permettre à un utilisateur connecté (mais non administrateur) de voir le contenu non publié (marqué avec la classe CSS node-unpublished). Cela semble être prévu pour Drupal 8 uniquement. Mais peut-être que quelqu'un était assez intelligent pour contourner ce problème?

J'ai un rôle nommé Content Editorqui devrait pouvoir voir tout le contenu non publié, qu'il en soit l'auteur ou non.

Artur
la source

Réponses:

17

Si vous êtes d'accord pour écrire un très petit module personnalisé, vous pouvez utiliser une combinaison de hook_permission()et hook_node_access()pour ce faire:

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

Tout rôle auquel vous attribuez la nouvelle autorisation devrait désormais pouvoir afficher n'importe quel nœud, qu'il soit publié ou non.

Clive
la source
Pour renforcer un peu la sécurité, j'ai toutefois ajouté && user_access('administer nodes')que cela dépend des droits de création de contenu. Maintenant, ce n'est pas "inconditionnel". Merci pour l'exemple!
Artur
Oui, j'aurais dû mentionner que vous voudriez peut-être "renforcer" un peu :) heureux d'aider
Clive
du nouveau, Clive. Cela résout également l'un de mes problèmes pour restreindre l'accès aux nœuds avec un certain terme de taxonomie !!!
uwe
1
Le code est vraiment "afficher sans condition tout contenu". Il ne vérifie jamais si le nœud est publié ou non. Ou si le rôle est autorisé à voir le contenu en premier lieu.
JM01
6

J'ai d'abord essayé le code ci-dessus, ce qui est génial. Mais après avoir accordé des droits sur le contenu non publié à un rôle, ce rôle ne pouvait toujours pas voir le contenu non publié dans les vues, ce qui peut être très utile pour certains rôles d'éditeurs ...

Je l'ai résolu en utilisant le module view_unpublished .

Kojo
la source
J'ai installé ce plugin et au lieu de résoudre mon problème, il n'a pas rendu tout le contenu non affiché pour le groupe Admin personnalisé que j'ai créé.
mohamad salama
Eh bien, je suis désolé que vous ayez eu un tel comportement. Je l'utilise depuis un moment maintenant et je n'ai jamais eu un tel pb avec un rôle (si vous vouliez dire que votre groupe Admin est un rôle). Vous pouvez alors publier un problème dans DO .
Kojo
3

J'utilise le module de révision pour cela. Lors de l'installation, il crée les autorisations suivantes pour chaque type de contenu:

  • Type de contenu : afficher les révisions de son propre contenu

  • Type de contenu : afficher les révisions du contenu de quiconque

  • Type de contenu : publier des révisions de son propre contenu

  • Type de contenu : publier des révisions du contenu de quiconque

En donnant à mes éditeurs la permission d'afficher les révisions du contenu de n'importe qui, ils peuvent accéder et publier tous les nœuds qui ont été créés ou révisés par d'autres utilisateurs.

Patrick Kenny
la source
1

C'est ce que j'ai fini par faire ...

Il crée une «vue de toute autorisation de contenu» pour chaque type de nœud. C'est à peu près la même chose que ce que fait le module de nœud, mais ajoute l'option supplémentaire.

/**
 * 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;
}
MTecknologie
la source
1

Il existe un module pour Drupal 7 et Drupal 8 pour cela:

View_unpublished

Ce module vous permet d'accorder l'accès à des rôles d'utilisateur spécifiques pour afficher les nœuds non publiés d'un type spécifique. Le contrôle d'accès est assez précis à cet égard.

JeroenT
la source
0

En vous référant au guide d'administration officiel: https://drupal.org/node/1106606, le module view_unpublished proposé par Kojo est une solution rapide et facile.

xaa
la source
0

Une solution de contournement simple et raisonnable consiste à utiliser l'indicateur «promouvoir vers la page d'accueil» sur les nœuds.

Si vous n'avez pas d'autre utilisation pour ce drapeau, filtrez vos vues sur "promu en première page". Vos éditeurs de contenu peuvent travailler sur le nœud avant sa promotion (en utilisant un lien direct). Mais il n'apparaîtra pas encore aux visiteurs du site, potentiellement.

Nous nous sommes inspirés de l'approche des vidéos non répertoriées de Youtube.

user18099
la source
0

Si vous ne devez voir le contenu dans une vue, désactivez SQL rewritingen Query Settingsvertu Otherdes vues UI.

Cela fonctionne pour moi, car je veux uniquement que les utilisateurs puissent défaire le contenu non publié.

Niall Murphy
la source