Projet

Général

Profil

Development #21488

inclure les attributs de rôle dans l'API

Ajouté par Frédéric Péters il y a environ 6 ans. Mis à jour il y a plus d'un an.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Authentic 2 - Development #20706: API de création de rôleFermé14 décembre 2017

Actions

Historique

#1

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

#2

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.

#3

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 :)

#4

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.

#5

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.

#6

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.

#7

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

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.

#8

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 ?

#9

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.

#10

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

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.

#11

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.

#12

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.

#14

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())
#15

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Nouveau à En cours
#16

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/

#17

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.

Formats disponibles : Atom PDF