Development #35189
API, lorsqu'on filtre par service les utilisateurs une erreur de typo renvoie la totalité des utilisateurs
0%
Description
En effet si on ne trouve pas de service, alors on ne filtre pas alors qu'on devrait simplement retourner une liste vide.
commit 38298c31929f39430349327abf9369c1a59d84bd Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Thu Mar 8 23:56:29 2018 +0100 api: add parameters to filter users by allowed services (fixes #22377) diff --git a/src/authentic2/api_views.py b/src/authentic2/api_views.py index 8d98c057..6e0dafd4 100644 --- a/src/authentic2/api_views.py +++ b/src/authentic2/api_views.py @@ -27,7 +27,7 @@ from django_filters.rest_framework import FilterSet from .custom_user.models import User from . import utils, decorators, attribute_kinds, app_settings, hooks -from .models import Attribute, PasswordReset +from .models import Attribute, PasswordReset, Service from .a2_rbac.utils import get_default_ou @@ -548,6 +548,14 @@ class UsersAPI(HookMixin, ExceptionHandlerMixin, ModelViewSet): if self.request.method == 'GET': qs = qs.prefetch_related('attribute_values', 'attribute_values__attribute') qs = self.request.user.filter_by_perm(['custom_user.view_user'], qs) + # filter users authorized for a specified service + if 'service-slug' in self.request.GET and 'service-ou' in self.request.GET: + service_slug = self.request.GET['service-slug'] + service_ou = self.request.GET['service-ou'] + service = Service.objects.filter(slug=service_slug, ou__slug=service_ou).prefetch_related('authorized_roles').first() + if service and service.authorized_roles.all(): <-- ici on doit toujours filtrer + qs = qs.filter(roles__in=service.authorized_roles.children()) + qs = qs.distinct() new_qs = hooks.call_hooks_first_result('api_modify_queryset', self, qs) if new_qs is not None: return new_qs
En effet si c'est utilisé par un service pour du provisionning alors il va charger la totalité de la liste.
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
- Fichier 0001-api-returns-no-user-if-service-slug-is-unknown-35189.patch 0001-api-returns-no-user-if-service-slug-is-unknown-35189.patch ajouté
- Tracker changé de Bug à Development
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
La véritable solution à ce problème est #35191, car le seul moyen propre de filtrer est de filtrer en se basant sur l'authentification, comme cela pas d'erreur possible (à moins de connaître des identifiants donnant un accès plus large). Une typo sur le nom du paramètre "service_slug" au lieu de "service-slug" donnera le même bug qu'ici, la seule solution serait de considérer tout paramètre inconnu comme une erreur mais c'est problématique.
Mis à jour par Paul Marillonnet il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
Benjamin Dauvergne a écrit :
La véritable solution à ce problème est #35191 […].
C'est quand même bien d'avoir ça ici.
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 96f8538a08872e59940a9dbcfcad9befbe1a8e2a Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Tue Sep 10 10:27:46 2019 +0200 api: returns no user if service-slug is unknown (#35189)
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
api: returns no user if service-slug is unknown (#35189)