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 programmé pour Drupal 8 uniquement. Mais peut-être que quelqu'un était assez intelligent pour faire une solution?
J'ai un rôle nommé Content Editor
qui devrait pouvoir voir tout le contenu non publié, qu'il en soit l'auteur ou non.
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.
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 .
J'utilise pour cela le module Révision . 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 n'importe qui
En donnant à mes rédacteurs la permission d'afficher les révisions du contenu de quiconque, ils peuvent accéder et publier tous les nœuds qui ont été créés ou révisés par d'autres utilisateurs.
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;
}
Il existe un module pour Drupal 7 et Drupal 8 pour cela:
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.
Si vous avez seulement besoin de voir le contenu dans une vue, désactivez SQL rewriting
dans Query Settings
sous Other
dans l'interface utilisateur des vues.
Cela fonctionne pour moi, car je veux uniquement que les utilisateurs puissent défaire le contenu non publié.
En se 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.
Une solution de contournement simple et raisonnable consiste à utiliser l'indicateur "Promouvoir en première page" 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.