Project

General

Profile

Bug #69699

Vue de traitement, vues personnalisées 'user' et 'all' avec le même slug

Added by Lauréline Guérin 2 months ago. Updated about 2 months ago.

Status:
Solution déployée
Priority:
Normal
Target version:
-
Start date:
29 September 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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).


Files


Related issues

Related to w.c.s. - Development #68324: SQL: requête sur custom_views exécutée énormémentFermé22 August 2022

Actions

Associated revisions

Revision dfd2902c (diff)
Added by Lauréline Guérin about 2 months ago

custom views: fix access to owner/any views with same slug (#69699)

History

#1

Updated by Lauréline Guérin 2 months ago

  • Related to Development #68324: SQL: requête sur custom_views exécutée énormément added
#3

Updated by Lauréline Guérin 2 months ago

  • Tracker changed from Development to Bug
#4

Updated by Agate Berriot 2 months ago

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.

#5

Updated by Lauréline Guérin 2 months ago

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.

#6

Updated by Agate Berriot 2 months ago

Ok, c'est clair merci !

#7

Updated by Pierre Ducroquet 2 months ago

Donc il faudrait faire un ORDER BY visibility = 'owner' DESC pour mettre en priorité les vues de l'utilisateur ?

#8

Updated by Lauréline Guérin 2 months ago

ou corriger le code :)

#9

Updated by Lauréline Guérin 2 months ago

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'

#10

Updated by Lauréline Guérin 2 months ago

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:]

#11

Updated by Lauréline Guérin 2 months ago

  • Assignee set to Lauréline Guérin
#12

Updated by Frédéric Péters about 2 months ago

  • Status changed from Solution proposée to Solution validée
#13

Updated by Lauréline Guérin about 2 months ago

  • Status changed from Solution validée to 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)
#14

Updated by Transition automatique about 2 months ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF