Open Crash-- opened 3 years ago
Les partages sont maintenant créés avec les règles de partage les plus élevée (readWrite
), mais chaque membre du partage peut avoir une restriction readOnly
.
On devrait donc faire disparaître la notion obsolète de one-way
/ two-way
pour la remplacer par la notion booléenne readOnly
(qui si elle est fausse est un readWrite
implicite).
Ceci impliquerait de modifier :
*-way
ou un object contenant *-way
=> pour retourner à la place un readOnly: true|false
*-way
pour afficher un résultat => tester plutôt le readOnly
Lors d'un partage non approuvé, cela créé un sharing shortcut. Même si l'expéditeur a créé le partage en two-way
, le destinataire se voit être en one-way
car actuellement on se base sur les rule
du partage pour définir *-way
. Or il n'y a pas de rule
dans un tel cas, on décide donc par défaut de choisir one-way
.
On devrait se baser sur le readOnly
des membres plutôt que les rules
(voir issue au-dessus https://github.com/cozy/cozy-libs/issues/1229#issuecomment-779690610)
En débuguant un peu pour #1227, je me suis aperçu de quelques petits soucis par rapport à cozy-sharing.
Récapitulons un peu ce que fait cette lib : Au mount:
On dispatch les sharings / permissions en faisant attention au revoqué / membres etc. On va ensuite mapé sur les éléments pour :
Si le doctype est different de io.cozy.files on s'arrête là.
Si le doctype est celui des fichiers alors :
L'ensemble fonctionne pas trop mal mais quelques remarques :
Ce qui fait que quand on récupère une sharing ou une permission pour le doctype io.cozy.files, on va se retrouver à mettre dans le slice byIds, "Contact1" et "Group1". On devrait certainement juste se baser sur la permission réellement dédiée au doctype qu'on demande afin de ne pas avoir à gérer des effets de bord ? Est-ce que c'est à cozy-client de gérer ça quand on fait :
Ou à cozy-sharing de les enlever quand on boucle dessus ?
Autre point : Si je partage l'ensemble d'un doctype via une permission, qu'est-ce qu'on s'attend à mettre dans le slice "byIds" ? Est-ce qu'on met genre "*" pour signifier tout ? null ? Et on contourne ensuite tous les traitements sur les paths pour retourner que tout est partagé ? (sur #1227 j'ai mis un tableau vide pour éviter de crasher nos apps dans un premier temps car c'est un cas qui arrive aujourd'hui avec le GL)