Admin: Mise à jour des permissions du groupe itou-admin#5757
Conversation
b80c382 to
7096971
Compare
xavfernandez
left a comment
There was a problem hiding this comment.
nit: réordonner les modèles dans un premier commit et modifier les droits dans un second faciliterait la relecture 👀
495ef21 to
2cf17b9
Compare
|
J'ai ajouté un commit plus restrictif |
| siae_evaluations_models.EvaluatedSiae, | ||
| siae_evaluations_models.EvaluatedJobApplication, | ||
| siae_evaluations_models.EvaluatedAdministrativeCriteria, | ||
| siae_evaluations_models.Sanctions, |
There was a problem hiding this comment.
Je pense que pilotage-admin* peut également en avoir besoin (et pareil pour `SiaeFinancialAnnex).
There was a problem hiding this comment.
Sanctions je dirais presque sûr que non, et SiaeFinancialAnnex probablement pas besoin non plus.
| eligibility_models.SelectedAdministrativeCriteria: PERMS_ALL, | ||
| eligibility_models.GEIQEligibilityDiagnosis: PERMS_ALL, | ||
| eligibility_models.GEIQAdministrativeCriteria: PERMS_ALL, | ||
| employee_record_models.EmployeeRecord: PERMS_DELETE, |
There was a problem hiding this comment.
ça a été fait sur les 6 derniers mois, cc @rsebille ?
There was a problem hiding this comment.
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 | 1912cf17b9 to
e1f495a
Compare
|
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. 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. |
| eligibility_models.SelectedAdministrativeCriteria: PERMS_ALL, | ||
| eligibility_models.GEIQEligibilityDiagnosis: PERMS_ALL, | ||
| eligibility_models.GEIQAdministrativeCriteria: PERMS_ALL, | ||
| employee_record_models.EmployeeRecord: PERMS_DELETE, |
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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, |
There was a problem hiding this comment.
Sanctions je dirais presque sûr que non, et SiaeFinancialAnnex probablement pas besoin non plus.
e1f495a to
0c08e3a
Compare
Je viens de voir ton commentaire :/. 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},
},
Oui, c'est pour ne pas donner la lecture seule sur des modèles auxquelles le groupe n'est pas sensé avoir accè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". |
b6e8731 to
168ea37
Compare
|
Yeah ! je comprends mieux. Nouvelle version alors : Tu en penses quoi ? |
168ea37 to
9f9ca21
Compare
| }, | ||
| } | ||
|
|
||
| # check consistency |
There was a problem hiding this comment.
Pareil, je l'aurais bien vu dans un commit à part 👼
There was a problem hiding this comment.
Je l'aurais aussi bien vu dans un test ou un check, soit en remplacement soit en ceinture-bretelle au runtime.
There was a problem hiding this comment.
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 🤷
There was a problem hiding this comment.
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 = { |
There was a problem hiding this comment.
On pourrait directement remettre **always_read_only_models dans group_itou_admin_permissions.
There was a problem hiding this comment.
Je ne trouve pas très lisible le fait que les modèles alternent entre une liste et une autre.
There was a problem hiding this comment.
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...
There was a problem hiding this comment.
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
left a comment
There was a problem hiding this comment.
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_modelspour raiser une erreur si on met une permission autre quePERMS_READsur 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 ! 😁
| }, | ||
| } | ||
|
|
||
| # check consistency |
There was a problem hiding this comment.
Je l'aurais aussi bien vu dans un test ou un check, soit en remplacement soit en ceinture-bretelle au runtime.
d4c9ab7 to
cebb958
Compare
|
@rsebille @xavfernandez c'est bon, j'ai sorti la vérification dans un test dédié. Je découperai en commits unitaires quand on aura tranché sur ce test (car les fixup sont trop pénibles à faire pour le moment) |
c370471 to
f20b26c
Compare
|
@xavfernandez @rsebille j'y ai perdu un bras, mais normalement c'est clean |
xavfernandez
left a comment
There was a problem hiding this comment.
Merci pour le joli découpage 🙏
These are in the always_read_only_models list from sync_group_and_perms.py or set the three can_*_permission to False manually
Now that these models all have the ReadonlyMixin, no need for this list
f20b26c to
6d9e1dc
Compare
🤔 Pourquoi ?
Pour permettre de retirer les droits super utilisateur à un maximum d'utilisateurs.
J'ai regardé les
LogEntryavecuser__is_superuser=Truesur les 6 derniers mois, et non créés par un dev.Il y a quelques points qui nécessitent discussion:
siae_evalutations-> je pense qu'on peut les mettre enPERMS_READdansitou-adminseulement (pas utile au pilotage et gps)Cannot delete an approval without an accepted job application, soit il y a une candidature acceptée qui pointe sur le PASS enon_delete=restrict, et on ne peut pas supprimer le code)CompanyTokensont-ils modifié par supportix ou le support ?🍰 Comment ?
🚨 À vérifier
🏝️ Comment tester ?
💻 Captures d'écran