Development #21485
API pour avoir la liste des rôles d'un utilisateur
0%
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
Historique
Mis à jour par Paul Marillonnet il y a environ 6 ans
- Assigné à mis à Paul Marillonnet
Ça m'intéresse, je veux bien prendre.
Mis à jour par Paul Marillonnet il y a environ 6 ans
- Fichier 0001-WIP-api_views-display-the-list-of-roles-for-a-user-2.patch 0001-WIP-api_views-display-the-list-of-roles-for-a-user-2.patch ajouté
- Patch proposed changé de Non à Oui
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.
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).
Mis à jour par Paul Marillonnet il y a environ 6 ans
- Fichier 0001-WIP-api_views-display-the-list-of-roles-for-a-user-2.patch 0001-WIP-api_views-display-the-list-of-roles-for-a-user-2.patch ajouté
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
.
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.
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 ?
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 leBaseUserSerializer
intact, et en héritant de celui-ci dans unExtendedUserSerializer
qui le remplacerait en tant qu'attribut de classeUsersAPI.serializer_class
si jamais ce paramètrefull
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
.
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é.
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é