Development #37187
manager, affichage/lecture seule pour les rôles pilotés depuis un annuaire LDAP
0%
Description
Pour un rôle qui se trouve mentionné dans LDAP_AUTH_SETTINGS/group_to_role_mapping on devrait afficher un message disant que le rôle est synchronisé depuis l'annuaire LDAP et ne pas permettre l'ajout/retrait de membres.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Valentin Deniaud il y a plus de 4 ans
Benjamin, tu imagines vérifier à la volée si un rôle est dans le mapping ? Ça se fait probablement de manière assez légère dans PermissionMixin, si on veut bien se contenter de planquer les boutons.
Un peu dommage par contre que le mapping soit de la forme [['dn', ['role1', 'role2']], ...]
au lieu de {'dn': ('role1', 'role2'), ...}
, ça fera pas un check très joli. Si c'est en prod à peu d'endroit et que le changer est envisageable...
Mis à jour par Benjamin Dauvergne il y a plus de 4 ans
La plupart des déploiements n'ont pas de mapping et quand il y en a il n'y en a qu'un, donc oui un truc assez moche :
if any(role.name in mapping[1] for mapping in getattr(settings, 'LDAP_SETTINGS', {}).get('group_to_role_mapping', [])): show_warning()
qu'on enlèvera le jour où on saura faire plus propre.
Mis à jour par Valentin Deniaud il y a plus de 4 ans
- Fichier 0001-manager-prevent-changing-ldap-sychronised-role-affec.patch 0001-manager-prevent-changing-ldap-sychronised-role-affec.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Pas si droit devant au final, il y a deux vues impactées, /manage/roles/x/ et /manage/users/y/roles/, avec la dernière qui se subdivise en deux. Tout n'est pas gérable simplement à un endroit comme j'imaginais.
Pour traiter la première j'aimerais bien la permission manage-members de #20513 (à moins qu'on veuille aussi bloquer l'édition du rôle ?). Je joins quand même le patch incomplet, pour info.
Mis à jour par Valentin Deniaud il y a plus de 4 ans
- Bloqué par Development #20513: Ajouter une permission explicite pour gérer les membres d'un rôle ajouté
Mis à jour par Valentin Deniaud il y a plus de 4 ans
- Fichier 0002-manager-prevent-changing-ldap-sychronised-role-affec.patch 0002-manager-prevent-changing-ldap-sychronised-role-affec.patch ajouté
- Fichier 0001-manager-fix-typo-37187.patch 0001-manager-fix-typo-37187.patch ajouté
- Statut changé de En cours à Solution proposée
En utilisant manage_members ajouté dans #20513, donc.
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Fichier 0002-manager-prevent-changing-ldap-sychronised-role-affec.patch 0002-manager-prevent-changing-ldap-sychronised-role-affec.patch ajouté
- Fichier 0001-manager-fix-typo-37187.patch 0001-manager-fix-typo-37187.patch ajouté
Rebasé.
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
Tu n'y es pour rien mais au final c'est super moche et difficilement maintenable, je ne sais pas pourquoi j'ai mis ticket facile. On se retrouve déjà avec des histoires de 'manage_members' dans une vue sensée être générique et maintenant des histoires de LDAP.
Je propose une autre voie qui servira aussi à faire disparaître les slugs à la con genre _a2-bidule
ou _hobo-machin
: avoir différents flags sur les rôles pour restreindre les permissions ou leur visibilité1.
Ici on aurait un flag can_manage_members=True
par défaut, qui serait mis à False dès qu'un rôle devient synchronisé par LDAP (à terme on arrêtera de synchroniser un rôle existant, on synchronisera des requêtes LDAP vers des trucs liés au LDAP dont un rôle normal héritera).
Coté LDAP ça reviendrait à poser :
if role.can_manage_members: logger.info('role %s is now only manageable tourgh LDAP', role) role.can_mamage_members = False role.save()
et coté vue des rôles, poser un accesseur sur les vues d'affichage et des gestion des membres et de l'héritage :
@cached_ def can_manage_members(self): return self.object.can_manage_members and self.request.user.has_perm(self.object, 'a2_rbac.role_manage_members')
Et utiliser object.can_manage_members
pour afficher le warning This role's members are managed elsewhere (LDAP).
qu'on étendra ou améliorera où on aura un cas qui n'est pas LDAP.
1 On pourrait avoir aussi visible
pour les rôles purement techniques qui n'auraient même pas de slug ou de nom ou can_edit
pour les rôles créer automatiquement mais dont on doit pas toucher aux nom et slug (genre "Administrateur du service <service>"; il faudrait rendre plus de chose explicites et ne plus jamais se baser sur la forme du slug.
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Statut changé de Solution proposée à En cours
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Fichier 0001-manager-forbid-changing-role-members-when-synced-fro.patch 0001-manager-forbid-changing-role-members-when-synced-fro.patch ajouté
- Statut changé de En cours à Solution proposée
Plus propre, y a pas à dire.
Mis à jour par Frédéric Péters il y a presque 4 ans
(commentaire fait à partir d'une lecture du patch)
Ça peut être affiché plus visiblement que "caché" en tooltip ? (capture exemple attachée)
Mis à jour par Valentin Deniaud il y a presque 4 ans
Frédéric Péters a écrit :
Ça peut être affiché plus visiblement que "caché" en tooltip ? (capture exemple attachée)
Je fais ça (note quand même que les boutons pour ajouter/supprimer un utilisateur ne sont plus non plus affichés).
Mis à jour par Valentin Deniaud il y a presque 4 ans
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
- Statut changé de Solution proposée à Solution validée
Tardif (désolé): tu pourrais renommer manage_members_allowed en can_manage_members ?
Mis à jour par Valentin Deniaud il y a presque 4 ans
J'aime pas trop le nom mais OK, je pousse quand c'est vert.
Mis à jour par Valentin Deniaud il y a presque 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 0d8ea42ad245d831ab11445502cb8a170f69d08b Author: Valentin Deniaud <vdeniaud@entrouvert.com> Date: Tue May 26 17:53:35 2020 +0200 manager: forbid changing role members when synced from ldap (#37187)
Mis à jour par Benjamin Dauvergne il y a presque 4 ans
Valentin Deniaud a écrit :
J'aime pas trop le nom mais OK, je pousse quand c'est vert.
Je ne suis pas fan du nom non plus mais c'est pour rester cohérent avec les accesseurs sur les vues et ailleurs.
Mis à jour par Frédéric Péters il y a presque 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
manager: forbid changing role members when synced from ldap (#37187)