Bug #69699
Vue de traitement, vues personnalisées 'user' et 'all' avec le même slug
0%
Description
Constaté sur #69681
Sur une vue de traitement, il existe une vue personnalisée s'appelant "Toutes", slug 'toutes', visible par tout le monde.
Mais un utilisateur a dupliqué cette vue, en lui mettant un scope 'user'. Le slug visible dans l'url est donc 'user-toutes'.
Cette vue perso user n'est pas accessible: lorsqu'on clique dessus, on active la vue 'toutes'; L'utilisateur ne peut pas supprimer sa vue 'user-toutes'.
Le code (#68324):
view_slug = component if view_slug.startswith('user-'): view_slug = view_slug[5:] for view in self.get_custom_views([Contains('slug', [view_slug, component])]): return self.__class__(formdef=self.formdef, view=view)
Le select n'a pas d'ordering (voir la méthode get_custom_views
). La vue perso 'toutes' doit sortir avant 'user-toutes', le slug match avec view_slug[5:]
, on active la vue 'toutes' au lieu de la vue 'user-toutes'.
Je n'ai pas reproduit en local (pg ne me trie pas les résultats de la même manière).
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Lauréline Guérin il y a plus d'un an
- Lié à Development #68324: SQL: requête sur custom_views exécutée énormément ajouté
Mis à jour par A. Berriot il y a plus d'un an
Côté DB :
ssh wcs.node1.hds.saas.entrouvert sudo -u wcs wcs-manage shell -d <tenant> # python shell from wcs.sql import CustomView In [21]: CustomView.get_by_slug('toutes') Out[21]: <CustomView id:349> In [22]: CustomView.get_by_slug('user-toutes') None
Pour autant que je puisse en juger, il n'y a rien en base pour cette vue.
Mis à jour par Lauréline Guérin il y a plus d'un an
Le slug en base c'est 'toutes', mais pour la vue user, avec le flag visibility='user'.
La méthode get_by_slug renvoie le premier résultat si plusieurs résultats sont trouvés.
Mis à jour par Pierre Ducroquet il y a plus d'un an
Donc il faudrait faire un ORDER BY visibility = 'owner' DESC
pour mettre en priorité les vues de l'utilisateur ?
Mis à jour par Lauréline Guérin il y a plus d'un an
Pierre Ducroquet a écrit :
Donc il faudrait faire un
ORDER BY visibility = 'owner' DESC
pour mettre en priorité les vues de l'utilisateur ?
Et ça ne serait pas suffisant: car alors on ne pourrait plus activer une vue en visibility 'any', avec le même slug qu'une vue 'owner'
Mis à jour par Lauréline Guérin il y a plus d'un an
- Fichier 0001-custom-views-fix-access-to-owner-any-views-with-same.patch 0001-custom-views-fix-access-to-owner-any-views-with-same.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
note: une vue avec visibility != owner ne peut pas avoir un slug commençant par user-
:
def ensure_slug(self):1 ... if base_slug.startswith('user-'): # prevent a slug starting with user- as it's used in URLs base_slug = 'userx-' + base_slug[5:]
Mis à jour par Frédéric Péters il y a plus d'un an
- Statut changé de Solution proposée à Solution validée
Mis à jour par Lauréline Guérin il y a plus d'un an
- Statut changé de Solution validée à Résolu (à déployer)
commit dfd2902c66134088cabef28934170eff91f16a6a Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Tue Oct 4 10:43:28 2022 +0200 custom views: fix access to owner/any views with same slug (#69699)
Mis à jour par Transition automatique il y a plus d'un an
- Statut changé de Résolu (à déployer) à Solution déployée
custom views: fix access to owner/any views with same slug (#69699)