Ne pas permettre à un utilisateur de supprimer un nœud, mais permet de supprimer à partir de vues en vrac Opérations

StackOverflow https://stackoverflow.com/questions/3690519

Question

Je le scénario suivant:

  • éditeur de rôle devrait pas être autorisé à nœuds supprimer. Par conséquent, le correspondant l'autorisation est de-sélectionné dans la page autorisations.
  • Cependant éditeur devrait être en mesure de supprimer des nœuds Vues de Vrac opérations. En utilisant Règles d'une action est créé appelé « suppression sûrs » que les choses comme les chèques si le noeud n'est pas publié, etc. avant de supprimer le noeud.

Le problème est Vues Opérations en vrac respecte les autorisations nœud. Éditeur ne pourra pas supprimer le nœud comme il n'a pas été donné cette autorisation. Est-il possible que la rédaction peut devenir un utilisateur de rôle plus important (comme une sorte de sudo) tout en effectuant cette action en VBO? est encore là une façon de dire VBO d'ignorer l'accès du nœud pour cette action?

Je suis sûr que c'est une exigence de courant, mais je ne peux pas sembler trouver une solution.

Les solutions qui ne nécessitent pas de programmation sera préférable.

Était-ce utile?

La solution

Le simple, mais beaucoup pas si propre, est la route que vous avez déjà pris, mais avec un module supplémentaire, petit pour l'aider.

  • a une my_module_can_delete($user) fonction, que les rendements TRUE si l'utilisateur est autorisé à supprimer, FALSE si l'utilisateur n'est pas.
  • met en œuvre hook_form_alter() de modifier et de supprimer le bouton sur le formulaire de node_edit, si my_module_can_delete($user)
  • met en œuvre hook_form_alter() pour modifier la forme de confirmation qui est appelé / node /% JNV / supprimer et ajouter un message là-bas, indiquant à l'utilisateur qu'il ou elle my_module_can_delete($user). Cela devrait être suffisant, car la désactivation de ce formulaire entraînera les utilisateurs de ne pas pouvoir aller au-delà de ce formulaire. FORM-API se chargera de cela.

Cependant, vous pouvez le rendre plus robuste, pour attraper d'autres modules sUPPression:

  • met en œuvre hook_nodeapi(), $op == 'delete' pour attraper les actions de suppression et l'arrêt (en invoquant drupal_goto(), ou en appelant drupal_access_denied() pour faire respecter un utilisateur d'erreur. Prendre uniquement suppression-actions si le referer a été la suppression-confirm-forme comme mentionné ci-dessus. Ou, plus sécurisé, votre whitelist VBO-action et de faux retour sur tous les autres referers. réferrent se trouvent souvent en lisant le noeud $ passé le long de hook_nodeapi().

A, à mon humble avis, beaucoup plus propre, mais probablement plus intensive autre , serait de faire simplement que vos lots / actions sont appelées à chaque action de suppression.

Dans un module, vous pouvez le faire en évitant toutes les VBO configuration et en laissant toutes les actions extra-suppression de là. Ensuite, écrire un module qui implémente hook_nodeapi() et appelle ensuite toutes les actions de nettoyage à partir de là. De cette façon, vous pouvez être sûr que vos actions de suppression-sont appelées à chaque action de suppression sur un nœud. Évidemment, vous pouvez ajouter des conditions dans votre hook_nodeapi () pour que Invoke vos modules dans certains cas (nœud-types, utilisateur-rôles, autorisations, etc.).

Autres conseils

Eh bien, il me semble que vous avez une configuration où vous ne voulez pas que les utilisateurs éditeur de rôle pour supprimer les choses, vraiment, sauf dans certaines situations extrêmes. Voici ma suggestion:

1) Installation de module de pavillon. Créer un « à supprimer » drapeau qui ne peut être attribué par l'éditeur de personnes de rôle.

2) Je n'ai pas examiné, mais je "m sûr qu'il ya probablement une règle ou d'un déclencheur / combo d'action qui dépublier le nœud lorsque le « à supprimer » le drapeau est attribué. Cela supprimera le nœud de vue occasionnel.

3) Ensuite, soit mis en place une activité d'exécution cron (déclenchement / action ou règle) pour supprimer des nœuds avec « à supprimer » jeu de drapeau sur eux, ou un autre utilisateur avec des autorisations plus sont disponibles dans de temps en temps et supprimer les éléments marqués .

De cette façon, vous n'êtes pas sans passer en fait le système d'autorisations, mais les choses sont encore être retiré de votre site.

Je me suis pris de ce pendant un certain temps jusqu'à ce que je remarqué le module « actions_permissions », activez cette et sur la page Autorisations, vous pouvez donner accès à des actions spécifiques sur un rôle en fonction des rôles.

Je n'ai pas une bonne solution sans codage, et je ne suis pas sûr que je qualifierais cette solution « grand » - mais d'une façon peut-être mettre en place un module simple avec un crochet de form_alter qui supprime le bouton de suppression de les formes d'édition de nœud car ils sont construits.

En général, il semble que le rôle soit est autorisé à noeuds ou non supprimer, et tripoter autour comme cela va être moins robuste que vous pourriez aimer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top