Project

General

Profile

Development #37187

manager, affichage/lecture seule pour les rôles pilotés depuis un annuaire LDAP

Added by Frédéric Péters over 1 year ago. Updated 9 months ago.

Status:
Solution déployée
Priority:
Normal
Category:
-
Start date:
24 Oct 2019
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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

Blocked by Authentic 2 - Development #20513: Ajouter une permission explicite pour gérer les membres d'un rôleSolution déployée08 Dec 2017

Actions

Associated revisions

Revision 0d8ea42a (diff)
Added by Valentin Deniaud 9 months ago

manager: forbid changing role members when synced from ldap (#37187)

History

#2

Updated by Benjamin Dauvergne over 1 year ago

  • Target version set to ticket facile
#3

Updated by Valentin Deniaud over 1 year 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...

#4

Updated by Benjamin Dauvergne over 1 year 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.

#5

Updated by Valentin Deniaud over 1 year ago

  • Assignee set to Valentin Deniaud
#6

Updated by Valentin Deniaud over 1 year ago

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.

#7

Updated by Valentin Deniaud over 1 year ago

  • Blocked by Development #20513: Ajouter une permission explicite pour gérer les membres d'un rôle added
#10

Updated by Benjamin Dauvergne 10 months 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.

#11

Updated by Benjamin Dauvergne 10 months ago

  • Status changed from Solution proposée to En cours
#12

Updated by Valentin Deniaud 9 months ago

Plus propre, y a pas à dire.

#13

Updated by Frédéric Péters 9 months ago

(commentaire fait à partir d'une lecture du patch)

Ça peut être affiché plus visiblement que "caché" en tooltip ? (capture exemple attachée)

#14

Updated by Valentin Deniaud 9 months 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).

#16

Updated by Benjamin Dauvergne 9 months ago

  • Status changed from Solution proposée to Solution validée

Tardif (désolé): tu pourrais renommer manage_members_allowed en can_manage_members ?

#17

Updated by Valentin Deniaud 9 months ago

J'aime pas trop le nom mais OK, je pousse quand c'est vert.

#18

Updated by Valentin Deniaud 9 months 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)
#19

Updated by Benjamin Dauvergne 9 months 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.

#20

Updated by Frédéric Péters 9 months ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF