Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ajoute un lien vers l'Espace Producteur dans le menu quand pertinent #3684

Merged
merged 14 commits into from
Jan 9, 2024

Conversation

AntoineAugusti
Copy link
Member

@AntoineAugusti AntoineAugusti commented Dec 26, 2023

Ajoute un lien vers l'Espace Producteur dans le menu de l'utilisateur quand l'utilisateur est membre d'une organisation ayant un jeu de données référencé sur le PAN.

image

J'ajoute des paramètres UTM aux liens vers l'Espace Producteur existant pour savoir d'où viennent les utilisateurs (menu, page "Infos producteur", notifications etc.)

Refactor des attributs de :current_user dans la session

Ceci concerne :current_user qui est stocké dans la session par SessionController.

  • suppression de la clé "organizations" qui stockait en réalité uniquement l'organisation du PAN si l'utilisateur est membre de cette organisation (concerne uniquement notre équipe). Adaptation des méthodes qui permettent de déterminer si un utilisateur est admin en conséquence.
  • ajout de l'attribut "is_admin"
  • ajout de l'attribut "is_producer"

@@ -353,11 +354,9 @@ defmodule TransportWeb.Router do
end

# NOTE: method visibility set to public because we need to call the same logic from LiveView
def is_transport_data_gouv_member?(current_user) do
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ce changement impose aux membres de notre équipe de se déconnecter/reconnecter étant donné qu'on n'a pas l'attribut is_admin dans notre session actuellement. Si les membres de notre équipe ne font pas ça elles ne verront plus le lien vers le BO et si ils vont sur l'URL ils seront redirigés avec une erreur. Rien de dramatique donc.

Pas d'impact pour les autres.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Amélioration sécurité à prévoir en lien avec:

En cas de vol de cookie, si je comprends bien (avant la PR ou après la PR d'ailleurs), le rôle restera encodé dans le cookie.

Il faudrait avoir un rafraîchissement systématique (ou plus frais en tout cas, ex: cache avec TTL si on veut éviter un appel d'API à chaque tour) sinon on se crée des problèmes (la suppression d'un compte sur data gouv ne protègera pas d'un vol de cookie admin).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Les changements importants dans la session sont dans ce fichier.

@@ -57,13 +57,4 @@ defmodule Helpers do
dates -> dates |> Enum.max(DateTime) |> DateTime.to_iso8601()
end
end

@spec admin?(map | nil) :: boolean
def admin?(%{} = user) do
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Supprime cette méthode elle faisait doublon avec ce qui était dans TransportWeb.Router

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you a data producer?
You're a data producer if you're a member of an organization with an active dataset
on transport.data.gouv.fr.
This is set when you log in, we can refresh this field more often in the future.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La durée de notre session est de 15 jours

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mis à jour dans l'Espace Producteur aussi b24229e

@AntoineAugusti AntoineAugusti marked this pull request as ready for review December 26, 2023 13:50
@AntoineAugusti AntoineAugusti requested a review from a team as a code owner December 26, 2023 13:50
Copy link
Contributor

@thbar thbar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello ! Deux commentaires pour le moment :

  1. il faudrait à mon avis DRYer la logique métier autour de is_producer pour éviter des soucis à plus long terme. Un module unique qui prend la décision autour de ça, voire fixe la clé, et les deux contrôleurs qui y font appel. Sûr, à court terme pas de souci, mais quelqu'un qui repasse derrière dans quelques temps va se trouver embrouillé.

  2. en terme d'UX, on se retrouve avec 2 opérations avec presque le même nombre de clics (1 hover + 1 clic, ou 1 clic + 1 clic) juste à côté dans le bandeau pour accéder à l'espace producteur :

CleanShot 2024-01-08 at 07 51 47@2x

Ca semble assez redondant à moins que j'ai raté quelque chose ?

Au final (et je le dis avec des pincettes, je sais que tu veux améliorer les conditions d'usage de cet espace et ça me paraît une bonne idée en général et je respecte ça) je ne suis pas sûr de comprendre l'apport UX de cette PR par rapport à ce qui avait avant ?

(par contre le début de refactoring en lien avec is_admin? et les tests etc me semblent utiles!)

À rediscuter, peut-être quelque chose que je n'ai pas vu !

@@ -57,13 +57,4 @@ defmodule Helpers do
dates -> dates |> Enum.max(DateTime) |> DateTime.to_iso8601()
end
end

@spec admin?(map | nil) :: boolean
def admin?(%{} = user) do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -353,11 +354,9 @@ defmodule TransportWeb.Router do
end

# NOTE: method visibility set to public because we need to call the same logic from LiveView
def is_transport_data_gouv_member?(current_user) do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Amélioration sécurité à prévoir en lien avec:

En cas de vol de cookie, si je comprends bien (avant la PR ou après la PR d'ailleurs), le rôle restera encodé dans le cookie.

Il faudrait avoir un rafraîchissement systématique (ou plus frais en tout cas, ex: cache avec TTL si on veut éviter un appel d'API à chaque tour) sinon on se crée des problèmes (la suppression d'un compte sur data gouv ne protègera pas d'un vol de cookie admin).

@AntoineAugusti AntoineAugusti marked this pull request as draft January 8, 2024 10:15
@AntoineAugusti
Copy link
Member Author

Je finis mon refactor et je remets le tout à la review

@AntoineAugusti
Copy link
Member Author

AntoineAugusti commented Jan 8, 2024

@thbar

UX

Le changement était bien attendu de @etalab/transport-bizdev, il permet de mettre en avant l'Espace Producteur dans son "menu personnel". La page "Infos producteurs" mélange page d'informations utiles (pertinent en phase de découverte non connecté) et accéder à son espace. Le menu devrait être le meilleur endroit pour accéder à cet espace en phase de croisière.

L'ajout du tracking permettra de voir l'usage qui en est fait et d'ajuster si besoin.

Refactor

Merci d'avoir mis ce sujet sur la table ! Je sentais qu'il y avait un peu de friction et de choses à améliorer. J'ai ajouté un module spécifique (TransportWeb.Session) et fait du refactor pour la partie is_producer / is_admin dans bfff9d9

On vérifie désormais qu'on est admin ou producteur à l'aide de Plug.Conn ou de Phoenix.LiveView.Socket uniquement, c'est plus propre que de passer des maps de current_user ou un attribut is_admin !

@AntoineAugusti AntoineAugusti marked this pull request as ready for review January 8, 2024 10:39
@thbar thbar disabled auto-merge January 8, 2024 20:49
Copy link
Contributor

@thbar thbar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Top !

  • UX -> merci pour l'explication !
  • Session -> nickel pour le refactor

Je ne vois rien de problématique, et j'approuve, toutefois je désactive par prudence l'auto-merge vu qu'il est tard.

On pourra merger demain matin tranquillement ça sera moins risqué.

GG !

@AntoineAugusti AntoineAugusti added this pull request to the merge queue Jan 9, 2024
Merged via the queue into master with commit 1d3f4d4 Jan 9, 2024
4 checks passed
@AntoineAugusti AntoineAugusti deleted the menu_link_to_producer_space branch January 9, 2024 07:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants