2009-11-01 4 views
0

J'ai une action personnalisée sur un modèle Foo tout mis en place et prêt à partir, avec une nouvelle autorisation que j'ai faite.Existe-t-il un moyen simple de fournir une action d'administrateur django personnalisée sans autoriser les modifications apportées aux modèles?

Le problème est que mes administrateurs ont besoin de l'autorisation can_change_foo pour afficher une liste de modifications et effectuer cette action personnalisée (que je ne veux pas attribuer).

Existe-t-il un moyen plus simple de configurer ceci sans réécrire la vue d'administration de la liste de modèles?

Répondre

0

Il y a un horrible bidouille je peux penser ... Complètement non testé, évidemment ...

Vous pouvez désactiver toutes les autres actions en redéfinissant get_actions() et permettent seulement votre action personnalisée. Ensuite, vous pouvez follow T.Stone's suggestion here et désactiver complètement les liens pour modifier des instances individuelles du modèle. Ce que cela vous permettrait de faire est de donner à vos utilisateurs la permission can_change_foo en sachant que la seule action qu'ils seraient en mesure d'effectuer était la vôtre.

Pas assez ... Surtout la partie de ne pas lier à la page d'édition ...

est réécrivant la liste vue admin si mal que ça? :-)

+1

PS. Peut-être que cela valait la peine de créer un ticket pour une demande de fonctionnalité Django dans les lignes suivantes: "Actions d'administration personnalisées qui peuvent être activées en fonction des autorisations personnalisées"? – cethegeek

+0

Aussi - cette suggestion de désactiver les liens ne fonctionne pas pour moi dans Firefox - la case à cocher devient "liée" et ouvre la page d'édition d'objet. – thornomad

0

J'ai fini par remplacer la méthode changelist_view() sur ma classe ModelAdmin, en copiant les valeurs par défaut de django et en commentant simplement la vérification des permissions. La liste (au moins de la façon dont je l'ai configuré) n'a pas de liens pour éditer les objets individuels, et même si c'était le cas, django lève un PermissionDenied si vous essayez de modifier un objet individuel. (puisque je n'ai jamais accordé l'autorisation can_change).

C'est un hack, et un peu monkeypatching, mais jusqu'à ce qu'il y ait une permission séparée pour voir une liste de changements, cela fonctionne plutôt bien.

Questions connexes