Development #40833
Faciliter une logique de lookup adhoc par héritage
0%
Description
Dans la recherche par attribut on ne peut rechercher que sur le modèle qui vient via auth.get_user_model()
.
En étant un tout petit plus permissif on pourrait franchir des relations.
Concrètement ça voudrait dire shooter :
try: User._meta.get_field(user_field) except FieldDoesNotExist: logger.error('invalid LOOKUP_BY_ATTRIBUTES configuration %r, user field %s does not exist', line, user_field) continue
Ce qui permettrait de poser dans la conf des trucs comme ça :
MELLON_LOOKUP_BY_ATTRIBUTES = [ { 'saml_attribute': 'tabellio_pers_id', 'user_field': 'docbowprofile__external_id', } ]
J'ai testé ça marche.
Fichiers
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
À voir si c'est vraiment plus intéressant de complexifier django-mellon ou de juste écrire un adapter pour docbow, qu'en penses-tu ?
Tu peux complètement remplacer Adapter.lookup_user() pour y faire ce que tu veux exactement sans te préoccuper d'éventuels changements dans django-mellon ou du fait que la configuration soit bien faite (si on est au pfwb c'est comme ci, si pw c'est comme ça).
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
À la rigueur, histoire de pas perdre le peu de debug qu'on a déjà sur ce point :
def check_field_path(base_klass, field_path):
name = field_path.split('__', 1)[0]
rest = field_path.split('__', 1)[1:]
try:
field = base_klass._meta.get_field(name)
except FieldDoesNotExist:
return False
if rest:
if not field.is_relation:
return False
return check_field_path(field.related_model, rest[0])
....
if not check_field_path(User, user_field):
logger.error('invalid LOOKUP_BY_ATTRIBUTES configuration %r, user field %s does not exist',
line, user_field)
continue
Mis à jour par Emmanuel Cazenave il y a environ 4 ans
Benjamin Dauvergne a écrit :
À voir si c'est vraiment plus intéressant de complexifier django-mellon ou de juste écrire un adapter pour docbow, qu'en penses-tu ?
En fait oui, c'est nettement plus simple, je préfère laisser tomber mon idée initiale.
Par contre pour ne pas avoir à tout re-écrire trop de choses dans un adapter spécifique, un petit hook du genre :
if lookup_by_attributes: user = self._lookup_by_attributes(idp, saml_attributes, lookup_by_attributes) + if user is None and hasattr(self, 'custom_lookup'): + user = self.cutom_lookup(idp, saml_attributes) +
Ça t'irait ?
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
Hmmm idéalement il faudrait découper lookup_user qui en fait trop (ça fait lookup_by_nameid() or (lookup_by_attribute() and link) or create()).
Je réécrirait plutôt ce bout de code :
... user = None lookup_by_attributes = utils.get_setting(idp, 'LOOKUP_BY_ATTRIBUTES') if lookup_by_attributes: user = self._lookup_by_attributes(idp, saml_attributes, lookup_by_attributes) ...
comme cela :
def lookup_user_by_attributes(self, idp, saml_attributes): rules = utils.get_setting(idp, 'LOOKUP_BY_ATTRIBUTES'): if rules: .... return None ... def lookup_user(...): .... user = self.lookup_user_by_attributes(idp, saml_attributes) ...
T'auras plus qu'à surcharger ça et si ça renvoie None appliquer tes propres règles, wadoyouthink ?
Mis à jour par Emmanuel Cazenave il y a environ 4 ans
- Fichier 0001-adapters-ease-custom-lookup-through-inheritance-4083.patch 0001-adapters-ease-custom-lookup-through-inheritance-4083.patch ajouté
- Sujet changé de Recherche par attribut : permette de franchir les relations à Faciliter une logique de look adhoc par héritage
- Statut changé de Nouveau à Solution proposée
- Assigné à mis à Emmanuel Cazenave
- Patch proposed changé de Non à Oui
Oui c'est plus souple comme ça, les classes filles peuvent choisir de donner la priorité à leur logique adhoc ou au lookup par attribut selon leur convenance.
Mis à jour par Emmanuel Cazenave il y a environ 4 ans
- Sujet changé de Faciliter une logique de look adhoc par héritage à Faciliter une logique de lookup adhoc par héritage
Mis à jour par Benjamin Dauvergne il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Emmanuel Cazenave il y a environ 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit f16d316cef5eb4bf7af2412fc11af6ba41e4037e Author: Emmanuel Cazenave <ecazenave@entrouvert.com> Date: Tue Mar 31 15:10:50 2020 +0200 adapters: ease custom lookup through inheritance (#40833)
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
adapters: ease custom lookup through inheritance (#40833)