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.
Files
Related issues
Associated revisions
History
Updated by Valentin Deniaud almost 5 years ago
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...
Updated by Benjamin Dauvergne almost 5 years ago
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.
Updated by Valentin Deniaud almost 5 years ago
- File 0001-manager-prevent-changing-ldap-sychronised-role-affec.patch 0001-manager-prevent-changing-ldap-sychronised-role-affec.patch added
- Status changed from Nouveau to En cours
- Patch proposed changed from No to Yes
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.
Updated by Valentin Deniaud almost 5 years ago
- Blocked by Development #20513: Ajouter une permission explicite pour gérer les membres d'un rôle added
Updated by Valentin Deniaud almost 5 years ago
- File 0002-manager-prevent-changing-ldap-sychronised-role-affec.patch 0002-manager-prevent-changing-ldap-sychronised-role-affec.patch added
- File 0001-manager-fix-typo-37187.patch 0001-manager-fix-typo-37187.patch added
- Status changed from En cours to Solution proposée
En utilisant manage_members ajouté dans #20513, donc.
Updated by Benjamin Dauvergne over 4 years ago
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.
Updated by Benjamin Dauvergne over 4 years ago
- Status changed from Solution proposée to En cours
Updated by Valentin Deniaud over 4 years ago
- File 0001-manager-forbid-changing-role-members-when-synced-fro.patch 0001-manager-forbid-changing-role-members-when-synced-fro.patch added
- Status changed from En cours to Solution proposée
Plus propre, y a pas à dire.
Updated by Frédéric Péters over 4 years ago
(commentaire fait à partir d'une lecture du patch)
Ça peut être affiché plus visiblement que "caché" en tooltip ? (capture exemple attachée)
Updated by Valentin Deniaud over 4 years ago
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).
Updated by Benjamin Dauvergne over 4 years ago
- Status changed from Solution proposée to Solution validée
Tardif (désolé): tu pourrais renommer manage_members_allowed en can_manage_members ?
Updated by Valentin Deniaud over 4 years ago
J'aime pas trop le nom mais OK, je pousse quand c'est vert.
Updated by Valentin Deniaud over 4 years ago
- Status changed from Solution validée to 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)
Updated by Benjamin Dauvergne over 4 years ago
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.
Updated by Frédéric Péters over 4 years ago
- Status changed from Résolu (à déployer) to Solution déployée
manager: forbid changing role members when synced from ldap (#37187)