Project

General

Profile

Development #21485

API pour avoir la liste des rôles d'un utilisateur

Added by Frédéric Péters about 2 years ago. Updated about 1 year ago.

Status:
Rejeté
Priority:
Normal
Category:
-
Target version:
-
Start date:
29 Jan 2018
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

On a l'API /api/user/ mais c'est juste bon pour l'utilisateur courant. (j'espérais pouvoir passer outre en profitant de PublikAuthentication pour que ça prenne en compte un paramètre pour authenfier l'utilisateur mais la classe n'est pas basée sur django-rest-framework).

On a des API sous /api/users/ mais la sérialisation n'inclut pas les infos des rôles.

0001-WIP-api_views-display-the-list-of-roles-for-a-user-2.patch View (2.48 KB) Paul Marillonnet, 09 Feb 2018 06:36 PM

0001-WIP-api_views-display-the-list-of-roles-for-a-user-2.patch View (4.72 KB) Paul Marillonnet, 13 Feb 2018 10:34 AM


Related issues

Related to Authentic 2 - Development #25645: API pour obtenir la liste des rôles portés par un utilisateur En cours 13 Aug 2018

History

#1 Updated by Paul Marillonnet about 2 years ago

  • Assignee set to Paul Marillonnet

Ça m'intéresse, je veux bien prendre.

#2 Updated by Paul Marillonnet about 2 years ago

Un début.
Du coup l'API permettrait aussi de mentionner des rôles lors de la création d'un utilisateur. Reste à voir comment seraient gérées les permissions.

#3 Updated by Frédéric Péters about 2 years ago

(pour information pour l'usage que j'imaginais ça m'irait d'avoir uniquement le côté lecture ici, que l'écriture passe par l'API rôles).

#4 Updated by Paul Marillonnet about 2 years ago

Patch en cours pour l'accès aux roles en lecture seule.

Je n'arrive pas encore à avoir le comportement attendu pour test_api_users_fetch_roles en fonction de l'initialisation de l'api_user.

#5 Updated by Benjamin Dauvergne about 2 years ago

  • Ajouter ajout de rôle à la création, non, pour l'instant.
  • Informations de rôle dans le JSON, je conditionnerai cela à l'ajout d'un paramètre ?full à l'URL du web-service, parce que ça va ajouter une jointure qui peut pas mal impacter les gens qui font des synchros et charger la bécane pour rien (et ce sera pareil pour les informations de liaisons, uniquement avec ?full).
  • Pour la sérialisation des rôles il faut la description complète uuid, slug, ou_slug et nom complet.

#6 Updated by Paul Marillonnet about 2 years ago

Benjamin Dauvergne a écrit :

  • Pour la sérialisation des rôles il faut la description complète uuid, slug, ou_slug et nom complet.

OK. Le plus simple je pense serait de réutiliser le sérialisateur de rôles en WIP dans #20706.
(http://www.django-rest-framework.org/api-guide/relations/#nested-relationships)

  • Ajouter ajout de rôle à la création, non, pour l'instant.

Ok je crois que c'est bien ce qu'empêche le paramètre read_only=True pour le SlugRelatedField relatif aux roles d'un utilisateur, dans le dernier patch posé ici.

  • Informations de rôle dans le JSON, je conditionnerai cela à l'ajout d'un paramètre ?full à l'URL du web-service, parce que ça va ajouter une jointure qui peut pas mal impacter les gens qui font des synchros et charger la bécane pour rien (et ce sera pareil pour les informations de liaisons, uniquement avec ?full).

Pas encore trouvé dans la doc du DRF quelque chose qui permettrait de conditionner la sérialisation ou non d'un attribut à la présence d'un paramètre de querystring dans l'URL du WebService. Si ça n'existe pas je vais regarder comment faire à la main.
Première idée sans le DRF : peut-être en laissant le BaseUserSerializer intact, et en héritant de celui-ci dans un ExtendedUserSerializer qui le remplacerait en tant qu'attribut de classe UsersAPI.serializer_class si jamais ce paramètre full est présent. Mauvaise idée ?

#7 Updated by Benjamin Dauvergne about 2 years ago

Paul Marillonnet a écrit :

  • Informations de rôle dans le JSON, je conditionnerai cela à l'ajout d'un paramètre ?full à l'URL du web-service, parce que ça va ajouter une jointure qui peut pas mal impacter les gens qui font des synchros et charger la bécane pour rien (et ce sera pareil pour les informations de liaisons, uniquement avec ?full).

Pas encore trouvé dans la doc du DRF quelque chose qui permettrait de conditionner la sérialisation ou non d'un attribut à la présence d'un paramètre de querystring dans l'URL du WebService. Si ça n'existe pas je vais regarder comment faire à la main.
Première idée sans le DRF : peut-être en laissant le BaseUserSerializer intact, et en héritant de celui-ci dans un ExtendedUserSerializer qui le remplacerait en tant qu'attribut de classe UsersAPI.serializer_class si jamais ce paramètre full est présent. Mauvaise idée ?

C'est exactement ça, à faire dans la méthode get_serializer_class() de la vue, tu pourrais y tester 'full' in self.request.GET.

#8 Updated by Frédéric Péters about 1 year ago

  • Status changed from Nouveau to Rejeté

Ticket dupliqué par #25645, plus avancé.

#9 Updated by Frédéric Péters about 1 year ago

  • Related to Development #25645: API pour obtenir la liste des rôles portés par un utilisateur added

Also available in: Atom PDF