Skip to content

Admin: Mise à jour des permissions du groupe itou-admin#5757

Merged
tonial merged 6 commits into
masterfrom
alaurent/support_admin_group
Mar 13, 2025
Merged

Admin: Mise à jour des permissions du groupe itou-admin#5757
tonial merged 6 commits into
masterfrom
alaurent/support_admin_group

Conversation

@tonial

@tonial tonial commented Mar 11, 2025

Copy link
Copy Markdown
Contributor

🤔 Pourquoi ?

Pour permettre de retirer les droits super utilisateur à un maximum d'utilisateurs.

J'ai regardé les LogEntry avec user__is_superuser=True sur les 6 derniers mois, et non créés par un dev.

Il y a quelques points qui nécessitent discussion:

  • Les modèles siae_evalutations -> je pense qu'on peut les mettre en PERMS_READ dans itou-admin seulement (pas utile au pilotage et gps)
  • Je ne comprends pas sous quelle condition on peut réussi à supprimer un PASS depuis l'admin (dans mes tests, soit j'avais un pass sans candidature acceptée et ça raise Cannot delete an approval without an accepted job application, soit il y a une candidature acceptée qui pointe sur le PASS en on_delete=restrict, et on ne peut pas supprimer le code)
  • les CompanyToken sont-ils modifié par supportix ou le support ?

🍰 Comment ?

Décrivez en quelques mots la solution retenue et mise en oeuvre, les difficultés ou problèmes rencontrés. Attirez l'attention sur les décisions d'architecture ou de conception importantes.

🚨 À vérifier

  • Mettre à jour le CHANGELOG_breaking_changes.md ?
  • Ajouter l'étiquette « Bug » ?

🏝️ Comment tester ?

Les instructions pour reproduire le problème, les profils de test, le parcours spécifique à utiliser, etc. Si vous disposez d'une recette jetable, mettre l'URL pour tester dans cette partie.

💻 Captures d'écran

@tonial tonial added the modifié Modifié dans le changelog. label Mar 11, 2025
@tonial tonial requested review from rsebille and xavfernandez March 11, 2025 20:58
@tonial tonial self-assigned this Mar 11, 2025
@tonial tonial force-pushed the alaurent/support_admin_group branch from b80c382 to 7096971 Compare March 12, 2025 05:07

@xavfernandez xavfernandez left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nit: réordonner les modèles dans un premier commit et modifier les droits dans un second faciliterait la relecture 👀

Comment thread itou/users/management/commands/sync_group_and_perms.py Outdated
Comment thread itou/users/management/commands/sync_group_and_perms.py Outdated
@tonial tonial force-pushed the alaurent/support_admin_group branch 2 times, most recently from 495ef21 to 2cf17b9 Compare March 12, 2025 12:17
@tonial

tonial commented Mar 12, 2025

Copy link
Copy Markdown
Contributor Author

J'ai ajouté un commit plus restrictif

siae_evaluations_models.EvaluatedSiae,
siae_evaluations_models.EvaluatedJobApplication,
siae_evaluations_models.EvaluatedAdministrativeCriteria,
siae_evaluations_models.Sanctions,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Je pense que pilotage-admin* peut également en avoir besoin (et pareil pour `SiaeFinancialAnnex).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sanctions je dirais presque sûr que non, et SiaeFinancialAnnex probablement pas besoin non plus.

Comment thread itou/users/management/commands/sync_group_and_perms.py
eligibility_models.SelectedAdministrativeCriteria: PERMS_ALL,
eligibility_models.GEIQEligibilityDiagnosis: PERMS_ALL,
eligibility_models.GEIQAdministrativeCriteria: PERMS_ALL,
employee_record_models.EmployeeRecord: PERMS_DELETE,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🙈

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

ça a été fait sur les 6 derniers mois, cc @rsebille ?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Je pense qu'on pourrais juste avoir PERM_EDIT 🙈, là comme ça (mais j'ai pas non plus tout mes neurones qui se touchent xD) j'ai pas de cas où on devrais l'autoriser et ça semble assez peu utilisé au final :

SELECT date_trunc('month', action_time), COUNT(*) FROM django_admin_log WHERE content_type_id = 46 AND action_flag = 3 GROUP BY 1 ORDER BY 1 DESC;
       date_trunc       | count 
------------------------+-------
 2025-03-01 00:00:00+00 |     3
 2025-02-01 00:00:00+00 |     1
 2025-01-01 00:00:00+00 |     4
 2024-12-01 00:00:00+00 |     3
 2024-11-01 00:00:00+00 |     7
 2024-10-01 00:00:00+00 |    13
 2024-09-01 00:00:00+00 |    12
 2024-08-01 00:00:00+00 |     4
 2024-07-01 00:00:00+00 |     6
 2024-06-01 00:00:00+00 |     1
 2024-05-01 00:00:00+00 |     3
 2024-04-01 00:00:00+00 |     4
 2024-03-01 00:00:00+00 |     4
 2024-01-01 00:00:00+00 |     3
 2023-12-01 00:00:00+00 |     9
 2023-11-01 00:00:00+00 |     4
 2023-10-01 00:00:00+00 |     8
 2023-09-01 00:00:00+00 |     8
 2023-08-01 00:00:00+00 |    28
 2023-07-01 00:00:00+00 |    21
 2023-06-01 00:00:00+00 |    30
 2023-05-01 00:00:00+00 |     8
 2023-04-01 00:00:00+00 |    35
 2023-03-01 00:00:00+00 |     8
 2023-02-01 00:00:00+00 |     8
 2023-01-01 00:00:00+00 |    16
 2022-12-01 00:00:00+00 |    26
 2022-11-01 00:00:00+00 |    14
 2022-10-01 00:00:00+00 |    27
 2022-09-01 00:00:00+00 |     8
 2022-08-01 00:00:00+00 |    31
 2022-07-01 00:00:00+00 |    25
 2022-06-01 00:00:00+00 |    66
 2022-05-01 00:00:00+00 |    55
 2022-04-01 00:00:00+00 |    73
 2022-03-01 00:00:00+00 |    72
 2022-02-01 00:00:00+00 |    50
 2022-01-01 00:00:00+00 |    31
 2021-12-01 00:00:00+00 |    42
 2021-11-01 00:00:00+00 |   228
 2021-10-01 00:00:00+00 |   191

@tonial tonial force-pushed the alaurent/support_admin_group branch from 2cf17b9 to e1f495a Compare March 12, 2025 19:41
@tonial

tonial commented Mar 12, 2025

Copy link
Copy Markdown
Contributor Author

Je me rends compte que je ne comprends pas trop la construction des listes (cc @rsebille)

On a un always_read_only_models qui sert à lister des modèles avec la permission READ.
Elle est injectée dans les permissions itou-admin et itou-admin-readonly
Jusque là, c'est bon.

Par contre on injecte la permission READ des modèles de cette liste dans les 4 autres groupes, seulement si le modèle est également dans la liste du groupe en question... sauf que si c'est le cas, il a au moins une permission READ 🤔

Je pense qu'il faudrait y mettre les objets auxquels on pense que tout le monde doit avoir accès.
Et les autres vont directement dans les dossiers concernés.

eligibility_models.SelectedAdministrativeCriteria: PERMS_ALL,
eligibility_models.GEIQEligibilityDiagnosis: PERMS_ALL,
eligibility_models.GEIQAdministrativeCriteria: PERMS_ALL,
employee_record_models.EmployeeRecord: PERMS_DELETE,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Je pense qu'on pourrais juste avoir PERM_EDIT 🙈, là comme ça (mais j'ai pas non plus tout mes neurones qui se touchent xD) j'ai pas de cas où on devrais l'autoriser et ça semble assez peu utilisé au final :

SELECT date_trunc('month', action_time), COUNT(*) FROM django_admin_log WHERE content_type_id = 46 AND action_flag = 3 GROUP BY 1 ORDER BY 1 DESC;
       date_trunc       | count 
------------------------+-------
 2025-03-01 00:00:00+00 |     3
 2025-02-01 00:00:00+00 |     1
 2025-01-01 00:00:00+00 |     4
 2024-12-01 00:00:00+00 |     3
 2024-11-01 00:00:00+00 |     7
 2024-10-01 00:00:00+00 |    13
 2024-09-01 00:00:00+00 |    12
 2024-08-01 00:00:00+00 |     4
 2024-07-01 00:00:00+00 |     6
 2024-06-01 00:00:00+00 |     1
 2024-05-01 00:00:00+00 |     3
 2024-04-01 00:00:00+00 |     4
 2024-03-01 00:00:00+00 |     4
 2024-01-01 00:00:00+00 |     3
 2023-12-01 00:00:00+00 |     9
 2023-11-01 00:00:00+00 |     4
 2023-10-01 00:00:00+00 |     8
 2023-09-01 00:00:00+00 |     8
 2023-08-01 00:00:00+00 |    28
 2023-07-01 00:00:00+00 |    21
 2023-06-01 00:00:00+00 |    30
 2023-05-01 00:00:00+00 |     8
 2023-04-01 00:00:00+00 |    35
 2023-03-01 00:00:00+00 |     8
 2023-02-01 00:00:00+00 |     8
 2023-01-01 00:00:00+00 |    16
 2022-12-01 00:00:00+00 |    26
 2022-11-01 00:00:00+00 |    14
 2022-10-01 00:00:00+00 |    27
 2022-09-01 00:00:00+00 |     8
 2022-08-01 00:00:00+00 |    31
 2022-07-01 00:00:00+00 |    25
 2022-06-01 00:00:00+00 |    66
 2022-05-01 00:00:00+00 |    55
 2022-04-01 00:00:00+00 |    73
 2022-03-01 00:00:00+00 |    72
 2022-02-01 00:00:00+00 |    50
 2022-01-01 00:00:00+00 |    31
 2021-12-01 00:00:00+00 |    42
 2021-11-01 00:00:00+00 |   228
 2021-10-01 00:00:00+00 |   191

asp_models.Country,
asp_models.Department,
cities_models.City,
companies_models.Company,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Il me manque peut-être (sûrement) du contexte mais le support à parfois besoin de créer des entreprises, par exemple les SIAE en attendant le flux IAE donc est-ce qu'on veux vraiment le forcer en lecture seule sauf pour les superadmin ?
Je suis également étonné de voir d'autre modèle important dans marqué comme always_read_only_models, l'idée initiale de cette variable et du code associé c'est que quelque soit le groupe ça sera RO.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

en fait on avait des modèles dans always_read_only_models qui étaient aussi dans group_itou_admin_permissions.

Je pense virer always_read_only_models et être explicite sur les permissions du groupe itou-admin

siae_evaluations_models.EvaluatedSiae,
siae_evaluations_models.EvaluatedJobApplication,
siae_evaluations_models.EvaluatedAdministrativeCriteria,
siae_evaluations_models.Sanctions,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Sanctions je dirais presque sûr que non, et SiaeFinancialAnnex probablement pas besoin non plus.

Comment thread itou/users/management/commands/sync_group_and_perms.py Outdated
Comment thread itou/users/management/commands/sync_group_and_perms.py Outdated
Comment thread itou/users/management/commands/sync_group_and_perms.py
Comment thread itou/users/management/commands/sync_group_and_perms.py
@tonial tonial force-pushed the alaurent/support_admin_group branch from e1f495a to 0c08e3a Compare March 12, 2025 21:04
@rsebille

Copy link
Copy Markdown
Contributor

Je me rends compte que je ne comprends pas trop la construction des listes (cc @rsebille)

On a un always_read_only_models qui sert à lister des modèles avec la permission READ. Elle est injectée dans les permissions itou-admin et itou-admin-readonly Jusque là, c'est bon.

Je viens de voir ton commentaire :/.
L'dée derrière always_read_only_models c'est de lister, et faire en sorte, que les modèles qui ne sont sensé jamais être modifiés par quelqu'un quelque soit sont groupe, donc c'est majoritairement tout ce qui est référentiel mais aussi tout ce qui peux nous servir pour de l'audit.

Je pense que la confusion vient du fait que le code aurais être de la même forme que pour les autres groupes plutôt que de faire un raccourcis :

"itou-admin": {
            **group_itou_admin_permissions,
            **{model: PERMS_READ for model in always_read_only_models if model in group_itou_admin_permissions},
        },
        "itou-admin-readonly": {
            **{model: PERMS_READ for model in group_itou_admin_permissions},
            **{model: PERMS_READ for model in always_read_only_models if model in group_itou_admin_permissions},
        },

Par contre on injecte la permission READ des modèles de cette liste dans les 4 autres groupes, seulement si le modèle est également dans la liste du groupe en question... sauf que si c'est le cas, il a au moins une permission READ 🤔

Oui, c'est pour ne pas donner la lecture seule sur des modèles auxquelles le groupe n'est pas sensé avoir accès ;)

Je pense qu'il faudrait y mettre les objets auxquels on pense que tout le monde doit avoir accès. Et les autres vont directement dans les dossiers concernés.

On pourrais avoir une liste de ce style mais de mémoire c'est assez faible car après tu n'as pas forcément les mêmes permissions et ça me semble plus simple de dupliquer pour chaque groupe comme ça on voit d'un coup à quel modèle il a accès, peut-être pas avec la bonne permission mais ça reste "plat".

@tonial tonial force-pushed the alaurent/support_admin_group branch 3 times, most recently from b6e8731 to 168ea37 Compare March 13, 2025 05:30
@tonial

tonial commented Mar 13, 2025

Copy link
Copy Markdown
Contributor Author

Yeah ! je comprends mieux.

Nouvelle version alors :
J'ai mis explicitement dans chaque liste les permissions auxquelles ils ont droit, et j'utilise cette liste always_read_only_models pour raiser une erreur si on met une permission autre que PERMS_READ sur un de ces modèles.
Je trouve ça plus clair à comprendre, et au moins on aura une erreur si on veut donner un accès en écriture à un modèle au lieu de ne pas le faire silencieusement.

Tu en penses quoi ?

@tonial tonial force-pushed the alaurent/support_admin_group branch from 168ea37 to 9f9ca21 Compare March 13, 2025 06:22
},
}

# check consistency

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pareil, je l'aurais bien vu dans un commit à part 👼

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Je l'aurais aussi bien vu dans un test ou un check, soit en remplacement soit en ceinture-bretelle au runtime.

@tonial tonial Mar 13, 2025

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Je séparerais les 2 commits quand on sera fixé sur les permissions à changer (les fixups sont un peu pénibles à faire)

Pour l'instant tests/users/test_sync_group_and_perms.py::test_command s'assure que la commande passe et donc qu'on n'a pas de permissions interdites, mais c'est pas super explicite.

Je vais bouger la liste dans un test séparé, mais j'ai un peu peur que ce ne soit pas vraiment tenu à jour 🤷

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Je suis toujours frileux sur le test implicite de comportement, avec le temps on a tendance à oublier et un jour c'est le drame :P. Mais dans le cas actuel j'imagine qu'on à encore 1-3 modifications de code avant de tomber dedans donc sans doute pas critique.

siae_evaluations_models.Sanctions,
}

group_itou_admin_permissions = {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

On pourrait directement remettre **always_read_only_models dans group_itou_admin_permissions.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Je ne trouve pas très lisible le fait que les modèles alternent entre une liste et une autre.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

A priori toutes les entrées de always_read_only_models sont attendues dans group_itou_admin_permissions.
Donc un peu dommage de dupliquer ces 23 lignes, en les mélangeant avec les autres...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

L'idée est aussi de vérifier qu'elles ne sont pas dans les permissions données à gps ou pilotage.
Je commence à me demander si on ne pourrait pas juste virer cette liste en se disant qu'on contrôle de tout manière très bien ce qu'il y a dedans, non ?

@rsebille rsebille left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah ! je comprends mieux.

Nouvelle version alors : J'ai mis explicitement dans chaque liste les permissions auxquelles ils ont droit, et j'utilise cette liste always_read_only_models pour raiser une erreur si on met une permission autre que PERMS_READ sur un de ces modèles. Je trouve ça plus clair à comprendre, et au moins on aura une erreur si on veut donner un accès en écriture à un modèle au lieu de ne pas le faire silencieusement.

Tu en penses quoi ?

Que c'est bien mieux ! 😁

Comment thread itou/users/management/commands/sync_group_and_perms.py Outdated
Comment thread itou/users/management/commands/sync_group_and_perms.py Outdated
},
}

# check consistency

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Je l'aurais aussi bien vu dans un test ou un check, soit en remplacement soit en ceinture-bretelle au runtime.

@tonial tonial force-pushed the alaurent/support_admin_group branch 2 times, most recently from d4c9ab7 to cebb958 Compare March 13, 2025 09:52
@tonial

tonial commented Mar 13, 2025

Copy link
Copy Markdown
Contributor Author

@rsebille @xavfernandez c'est bon, j'ai sorti la vérification dans un test dédié.
Je ne sais pas si c'est vraiment mieux.

Je découperai en commits unitaires quand on aura tranché sur ce test (car les fixup sont trop pénibles à faire pour le moment)

@tonial tonial requested review from rsebille and xavfernandez March 13, 2025 09:54
@tonial tonial force-pushed the alaurent/support_admin_group branch 2 times, most recently from c370471 to f20b26c Compare March 13, 2025 14:03
@tonial

tonial commented Mar 13, 2025

Copy link
Copy Markdown
Contributor Author

@xavfernandez @rsebille j'y ai perdu un bras, mais normalement c'est clean

@xavfernandez xavfernandez left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Merci pour le joli découpage 🙏

Comment thread itou/www/itou_staff_views/views.py Outdated
@tonial tonial force-pushed the alaurent/support_admin_group branch from f20b26c to 6d9e1dc Compare March 13, 2025 14:48
@tonial tonial added this pull request to the merge queue Mar 13, 2025
Merged via the queue into master with commit 3073510 Mar 13, 2025
@tonial tonial deleted the alaurent/support_admin_group branch March 13, 2025 20:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

modifié Modifié dans le changelog.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants