Development #21488
inclure les attributs de rôle dans l'API
0%
Description
Dans #20706, Benjamin :
À noter qu'il y a une difficulté, dans le cadre de Publik le modèle des Rôles est étendu de deux attributs stockés dans des modèles RoleAttribute voir hobo/agent/authentic/role_forms.py, nommé details (str), emails(list of str) et emails_to_members(boolean) stockés en JSON, à Fred de dire si c'est important pour lui de pouvoir définir ces attributs à ce stade.
Je répondais que non je n'en avais pas besoin dans l'immédiat mais pour autant ça sera utile.
Fichiers
Demandes liées
Historique
Mis à jour par Frédéric Péters il y a environ 6 ans
- Lié à Development #20706: API de création de rôle ajouté
Mis à jour par Paul Marillonnet il y a environ 6 ans
- Assigné à mis à Paul Marillonnet
Je veux bien prendre aussi, ce sera l'occasion pour moi de comprendre plus en détails l'utilisation des objets RoleAttribute
de a2_rbac.models
.
Mis à jour par Paul Marillonnet il y a environ 6 ans
Je ne connais pas les échéances attendues là-dessus Frédéric. Est-ce que je peux me permettre d'attendre d'avoir #20706 dans master avant de commencer à proposer des patches là-dessus ?
Edit: La réponse est dans la description du ticket... Je mets ça sur ma todolist et m'y consacrerai une fois #20706 acké et poussé.
Edit 2: Ce n'est pas pour autant que je ne vais pas commencer à y réfléchir :)
Mis à jour par Paul Marillonnet il y a presque 6 ans
Je voulais inclure tout ça dans le serializer, mais j'ai l'impression maintenant que c'est trop tard pour prendre en compte la gestion des ces attributs de rôle.
Je vais implémenter ça dans le le ModelViewSet.
Mis à jour par Paul Marillonnet il y a presque 6 ans
En me basant là dessus :
http://www.django-rest-framework.org/api-guide/relations/#nested-relationships
je pense qu'il faut rajouter un RoleAttributeSerializer.
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
- Priorité changé de Normal à Bas
Il n'y a pas d'échéance, fais si tu veux apprendre mais il n'y a pas d'urgence sur ce point.
Mis à jour par Paul Marillonnet il y a presque 6 ans
- Fichier 0001-WIP-role-api-add-extra-role-attributes-21488.patch 0001-WIP-role-api-add-extra-role-attributes-21488.patch ajouté
- Patch proposed changé de Non à Oui
Ok, si tu as d'autres tickets plus urgents à me pointer, je suis preneur.
D'ailleurs, je me suis honteusement défilé pour #19396, je peux reprendre, si tu veux.
En attendant, j'aimerais partir sur quelque chose comme ça. C'est du pseudo code, je n'ai pas encore compris comment gérer la clé étrange RoleAttribute::role
.
Mais dans l'idée, je pense qu'il faut implémenter un serializer dédié à ces attributs de role additionnels.
Edit: La clé étrangère, c'est le DRF qui gère ça de façon transparente. Je vais maintenant écrire des tests.
Mis à jour par Paul Marillonnet il y a presque 6 ans
Est-ce qu'on veut avoir accès en écriture à ces attributs de rôle ?
Mis à jour par Frédéric Péters il y a presque 6 ans
Le cadre initial était la création de rôle donc oui clairement il s'agit de pouvoir écrire.
Mis à jour par Paul Marillonnet il y a presque 6 ans
- Fichier 0001-WIP-role-api-add-extra-role-attributes-21488.patch 0001-WIP-role-api-add-extra-role-attributes-21488.patch ajouté
Tout fait comme dans la doc, j'aimerais bien que ça fonctionne, mais je n'y arrive pas.
L'imbrication de serializers semble facile, pourtant je bute dessus. Je pose quand même un patch WIP, je reprendrai plus tard.
Mis à jour par Paul Marillonnet il y a presque 6 ans
Quelque chose m'échappe encore.
L'erreur en question à l'exécution des tests :
E AssertionError: The `.create()` method does not support writable nestedfields by default. E Write an explicit `.create()` method for serializer `authentic2.api_views.RoleSerializer`, or set `read_only=True` on nested serializer fields.
car RoleSerializer.create() appelle ModelSerializer.create().
Apparemment ce n'est pas d'usage.
Je vais corriger ça.
Mis à jour par Paul Marillonnet il y a presque 6 ans
Toujours ce même problème, je n'arrive pas à faire fonctionner les sérialisations imbriquées comme dans la doc du DRF.
Je continue de chercher ce qui ne va pas dans mon patch (en particulier, pourquoi le RoleAttributeSerializer n'est pas utilisé).
Edit: La levée d'erreur est dans rest_framework.serializers.raise_errors_on_nested_writes
.
Je regarde ce qui ne plaît pas au DRF.
Mis à jour par Paul Marillonnet il y a presque 6 ans
- Fichier 0001-role-api-add-extra-role-attributes-21488.patch 0001-role-api-add-extra-role-attributes-21488.patch ajouté
Trouvé ce qui n'allait pas.
Mis à jour par Benjamin Dauvergne il y a presque 6 ans
import model_meta
n'est pas utilisé- ça :
if 'role_attributes' in validated_data: role_attributes_data = validated_data.pop('role_attributes') else: role_attributes_data = ()
s'écrit plutôt comme cela de manière pythonic (aussi on préfèrera les listes au tuple, par souci d'homogénéité, on utilisera plutôt un tuple pour des données hétérogènes, ex.: (1, 'x', True)):role_attributes_data = validated_data.pop('role_attributes', [])
- je garderai l'appel à super() plutôt que de ré-implémenter
- tu gères la création mais pas la mise à jour (update())
Mis à jour par Anaïs Ecuvillon il y a environ 2 ans
- Tags mis à Publik Territoire
- Priorité changé de Bas à Normal
- Planning mis à Non
Pour Publik Territoire, j'aurai besoin que ce ticket avance.
Voici mon cas d'usage :
J'ai mis en place ce webservice qui créé bien un rôle : https://demarches-aecuvillon.test.entrouvert.org/backoffice/workflows/20/status/1/items/6/
Mais j'ai également besoin de renseigner le courriel, et de décocher la case "Propager les courriels..." : https://connexion-aecuvillon.test.entrouvert.org/manage/roles/40/edit/
Mis à jour par Frédéric Péters il y a plus d'un an
- Statut changé de En cours à Fermé
Obsolète via #69895 qui supprime/intègre les attributs de rôle.