Arborescence de groupes #5
Labels
No labels
Bug
Critical
Doing
Enhancement
Good first issue
Meta
To Do
Upstream — update needed
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: DGNum/WikiENS#5
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Il faudrait pouvoir avoir des groupes arborescents : par exemple,
Nuit
devrait être un méta-groupe contenantCOF
,Nuit 19
,Nuit 18
, …COF
étant lui-même un groupe contenantCOF 19
etCOF 18
par exemple. Cf l'issue surdjango-wiki
ici (TL;DR : ils ne veulent pas implémenter ça upstream).On peut changer le modèle utilisé pour la gestion des groupes avec le setting
WIKI_GROUP_MODEL
, mais c'est un peu risqué. On peut aussi changer la fonction qui détermine si on peut lire/écrire un truc, mais ça demande de refaire toute l'UI. Après un regard rapide dans le code, ça n'a pas l'air trop risqué en fait, il faudrait expérimenter.On pourrait en profiter pour implémenter #2.
Résumé de discussions @mpepin et @tbastian sur Merle [KDE/Général] :
Du coup [1] est a priori adopté.
Et du coup, on est d'accord que ça donne un truc comme ça ?
Edit j'ai rajoué le
blank=True, null=True
aprèsÀ la réflexion je suis même pas si sûr que c'est une arborescence et pas un DAG.
Typiquement on a
Du coup c'est plutôt un truc avec un
ManyToMany
qui pointe les nœuds fils ?En fait je pense que la bonne manière de se représenter ça c'est de définir dans un groupe quels membres lui sont propres, et quels groupes ce groupe inclut. On pourrait aussi se demander si pour que ça soit plus clair à lire, un groupe ne peut contenir que l'un des deux (soit un groupe est un métagroupe qui inclut des groupes, soit il contient des gens directement).
Oui, en fait je crois qu'on ne va pas échapper au manytomany…
Par contre est-ce que ça va vraiment être plus clair à lire de séparer les deux cas ?
Sachant que dans ton modèle il y aura forcément un M2M vers les groupes django et un M2M vers les metagroups. Malheureusement je ne crois pas qu'on puisse faire un "ou" propre dans l'ORM django.
Je parle pas de propre dans le code, mais de propre dans l'architecture des groupes : que ça soit clair pour un humain qui regarde le graphe des groupes que si COF18 et COF19 contiennent des gens, alors COF ne contient pas de personne random rajoutée au niveau du métagroupe COF directement. Dans le code je sais pas si on peut faire ça joliment, peut-être qu'avec de la validation ça se fait ?
Dans le code on peut mettre un champ
group_type
qui vautMETA
ouREAL
et on ne présente pas le même formulaire à la personne qui manage les groupes selon ce champ.La validation ça marche aussi.
Ou encore on peut mélanger les deux, parce que pourquoi pas, mais on met un champ booléen sur les groupes qui dit si on a le droit de mettre des utilisateurs dans le groupe ou juste des sous-groupes
Ou alors on fait juste confiance aux gens pour ne pas mélanger les deux, je ne sais pas si c'est vraiment au code d'enforce ça.
Ça peut être une feature de mélanger les deux au pire.
En tout cas la v1 peut s'en foutre et on verra selon comment c'est utilisé s'il faut faire des modifs dans un deuxième temps
Pour moi la v1 c'est :
Et assez vite ensuite :
post_save
ou si veut que ça se fasse par un appel explicite à la bonne fonctionC'est quoi tes deux M2M ? C'est pas un M2M pour l'inclusion de groupes + un O2O pour mapper un groupe arborescent sur un groupe Django ?
Sinon, pour moi c'est assez clair qu'on veut mettre ça dans
post_save
, non ? Par contre, le truc à voir c'est si on veut mettre unpost_save
dans l'autre sens pour vérifier que personne n'est en train de toucher aux groupes à la main.Et la détection de cycles c'est pas bien compliqué je pense, c'est dans la validation du groupe que ça doit se faire je pense.
Ah on avait pas le même truc en tête :
subgroups
versMyGroup
et un autreusers
versUser
+ un O2O vers un groupe DjangoOui
post_save
c'est bien, je divague. Dans l'autre sens c'est pas unpost_save
puisquepost_save
c'est trop tard. Mais je ne suis même pas sûr qu'on ait besoin de mettre de sécurité vu qu'on va probablement fermer l'accès à l'admin et permettre de toucher aux groupes seulement via notre interface.C'est pas compliqué mais il y a quand même un tri topologique à écrire. Et oui, dans la validation.
Ah, je suis pas certain que les users venant du groupe Django ça soit mieux en vrai, j'avais juste oublié le M2M vers les users. Je pense même que c'est moins bien parce que tant qu'à avoir du scotch on veut pas que ça soit dans les deux sens, si on peut avoir au moins une structure self contained propre c'est mieux je pense.
On duplique plus de trucs mais c'est probablement pas grave. Dans ce cas va pour deux 2M2
MyGroup
+User
et un O2O versGroup
mentioned in merge request !8
C'est un peu plus compliqué que prévu pour le
post_save
en fait, pour deux raisons :post_save
ne marche que pour le modèle et pas pour le m2m, donc on doit gérer trois signaux en fait (cf le code dans la MR),closed via merge request !8
mentioned in commit
087b5a871e
reopened
Merge request !8 only implemented the backend, we still need a frontend.
mentioned in issue #2