Comment puis-je permettre aux utilisateurs de dépublier et de publier leur propre contenu?
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éé.
La solution
Une approche interface utilisateur que je l'ai utilisé sur certains sites est le Remplacer le module d'options de noeud, ajoute des autorisations similaires à ceux que mon autre réponse fournit, en plus d'une supplémentaire groupe.
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');
}
Vous pouvez y parvenir en combinant la puissance du Drapeau et les modules de règles
- Créer un nouveau drapeau Publier et les utilisateurs autorisés à ne signaler leur propre contenu.
- Ensuite, ajouter une nouvelle règle qui se déclenche lorsqu'un noeud se trouve en position et qui publie le nœud Flagged. De même, créer une seconde règle que les noeuds de unpublishes qui sont sous sans pavillon Publier .
- Enfin, les utilisateurs autorisés à voir leurs propres noeuds non publiés et ajouter un Publier lien vers les pages du nœud.
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.