Projet

Général

Profil

Development #42086

L'opération d'auto-administration des rôles devrait être MANAGE_MEMBERS_OP pas CHANGE_OP

Ajouté par Benjamin Dauvergne il y a environ 4 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
24 avril 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Les seuls qui doivent avoir CHANGE_OP sont les administrateurs de tous les rôles (soit globalement soit au niveau de chaque OU) et ceci via ADMIN_OP.


Fichiers


Demandes liées

Lié à Authentic 2 - Development #20513: Ajouter une permission explicite pour gérer les membres d'un rôleFermé08 décembre 2017

Actions

Révisions associées

Révision 3e197664 (diff)
Ajouté par Valentin Deniaud il y a plus de 3 ans

a2_rbac: change self admin permission to manage_members (#42086)

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Lié à Development #20513: Ajouter une permission explicite pour gérer les membres d'un rôle ajouté
#2

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Assigné à mis à Valentin Deniaud
#3

Mis à jour par Valentin Deniaud il y a presque 4 ans

Je veux bien un avis sur l'approche, assez simple au demeurant, basée sur la description du ticket qui dit qu'une permission CHANGE d'un rôle sur lui même n'a jamais lieu d'exister.

#4

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Ça m'a l'air ok.
---

        new_perm = Permission.objects.filter(operation=new_op, target_ct=ct, target_id=role.pk).first()

Pas nécessaire si tu mets ou__isnull=True, à cause de l'index d'unicité, donc un get_or_create() suffira, je pense plus propre d'enlever l'ancienne et d'en créer une nouvelle, les permissions sont des objets partagés.

#5

Mis à jour par Valentin Deniaud il y a presque 4 ans

Benjamin Dauvergne a écrit :

je pense plus propre d'enlever l'ancienne et d'en créer une nouvelle, les permissions sont des objets partagés.

Mais est-ce que role1 a le droit d'avoir CHANGE_OP sur role2 ? Le titre du ticket dit que peut-être et la description que non.

Aussi, un truc que j'aimerais bien comprendre, a2_rbac/models.py :

306         self.permissions.through.objects.get_or_create(role=self, permission=self_perm)

J'ai trouvé la doc, https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ManyToManyField.through
Mais elle ne me dit pas quel intérêt il y a à faire ça dans ce cas là, ni la différence par rapport à un self.permissions.add(self_perm).

#6

Mis à jour par Benjamin Dauvergne il y a presque 4 ans

Valentin Deniaud a écrit :

Benjamin Dauvergne a écrit :

je pense plus propre d'enlever l'ancienne et d'en créer une nouvelle, les permissions sont des objets partagés.

Mais est-ce que role1 a le droit d'avoir CHANGE_OP sur role2 ? Le titre du ticket dit que peut-être et la description que non.

Je vais simplifier alors peut-être : role.get_admin_role() ne doit pas avoir la permission CHANGE_OP sur role.

Aussi, un truc que j'aimerais bien comprendre, a2_rbac/models.py :
[...]
J'ai trouvé la doc, https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ManyToManyField.through
Mais elle ne me dit pas quel intérêt il y a à faire ça dans ce cas là, ni la différence par rapport à un self.permissions.add(self_perm).

Il n'y a pas de différence.

#7

Mis à jour par Valentin Deniaud il y a presque 4 ans

Benjamin Dauvergne a écrit :

Je vais simplifier alors peut-être : role.get_admin_role() ne doit pas avoir la permission CHANGE_OP sur role.

Oui ok ma question n'avait pas trop de sens, on retombe sur un cas déjà traité.
Et du coup je me demande si la migration ne pourrait pas juste être un Permission.objects.filter(operation=change_op, target_ct=role_ct).update(operation=manage_members_op) (mais dans le doute je reste sur mon approche en ciblant spécifiquement les rôles auto-administrés).

Pas nécessaire si tu mets ou__isnull=True, à cause de l'index d'unicité, donc un get_or_create() suffira, je pense plus propre d'enlever l'ancienne et d'en créer une nouvelle, les permissions sont des objets partagés.

Un scénario où ça va casser (#42179 inside), c'est si la permission existe déjà avec l'ou. Dans ce cas, crash dans has_self_administration car la migration a créé la même permission sans ou, du coup le get sur (op=manage_members, target=role) renvoie deux permissions.

Donc soit attendre le fix qui fait que get_admin_role ne met plus l'ou de la permission + réparation des permissions existantes, soit modifier has_self_administration. Je pars sur cette deuxième option.

#8

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

Rebasé je vais relire quand aura buildé.

#9

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

  • Statut changé de Solution proposée à Résolu (à déployer)
commit 3e197664ae314fd02bef8ab434af8cd04d249d30
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Mon Apr 27 15:03:07 2020 +0200

    a2_rbac: change self admin permission to manage_members (#42086)
#10

Mis à jour par Frédéric Péters il y a plus de 3 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF