Projet

Général

Profil

Development #21485

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

Ajouté par Frédéric Péters il y a environ 6 ans. Mis à jour il y a environ 5 ans.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
29 janvier 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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.


Fichiers


Demandes liées

Lié à Authentic 2 - Development #25645: API pour obtenir la liste des rôles portés par un utilisateurEn cours13 août 2018

Actions

Historique

#1

Mis à jour par Paul Marillonnet il y a environ 6 ans

  • Assigné à mis à Paul Marillonnet

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

#2

Mis à jour par Paul Marillonnet il y a environ 6 ans

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

Mis à jour par Frédéric Péters il y a environ 6 ans

(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

Mis à jour par Paul Marillonnet il y a environ 6 ans

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

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

  • 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

Mis à jour par Paul Marillonnet il y a environ 6 ans

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

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

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

Mis à jour par Frédéric Péters il y a environ 5 ans

  • Statut changé de Nouveau à Rejeté

Ticket dupliqué par #25645, plus avancé.

#9

Mis à jour par Frédéric Péters il y a environ 5 ans

  • Lié à Development #25645: API pour obtenir la liste des rôles portés par un utilisateur ajouté

Formats disponibles : Atom PDF