Les groupes représentent une AMAP ( ou un GASAP ).
Les utilisateurs peuvent devenir membre d'un groupe, et eventuellement avoir certains droits dans ce groupe.
Les groupes sont gérés par la table Group.
Le champs regOption correspond à un enum qui précise le mode d'entrée dans le groupe : Ouvert, par liste d'attente, fermé...
Le champs disabled correspond à un enum qui précise pourquoi ce groupe est bloqué. Si disabled est null, le groupe n'est pas bloqué et est utilisable.
L'appartenance d'un utilisateur à un groupe est stocké dans le table UserGroup qui a une relation vers User.id et une autre vers Group.id. Il ne peut exister qu'un seul UserGroup par groupe-utilisateur ( clé primaire unique sur les 2 relations ).
Le champs balance représente le solde de l'utilisateur dans ce groupe ( somme du Operation.amount de toutes ses opérations ). Pour plus d'informations, consultez la doc des paiements
Le champs rights stocke les droits de ce membre dans ce groupe en JSON
L'entité Group est représentée par Group.hx en Haxe et par group.entity.ts en TS.
L'entité UserGroup est représentée par UserGroup.hx en Haxe et par user-group.entity.ts en TS.
Les droits sont stockés dans UserGroup.rights en JSON et peuvent être de type :
GroupAdmin; //administrateur du groupe
ContractAdmin(?cid:Int); //peut gérer un contrat ( ou tous, si aucun "cid" n'est défini )
Membership; //peut gérer la liste des membres.
Messages; //peut envoyer des messages
Les droits sont cumulables. Si quelqu'un veut pouvoir tout faire dans un groupe, il doit cumuler tous les droits.
//exemple de droits stockés en JSON dans UserGroup.rights
[
{"right":"ContractAdmin","params":["8"]},
{"right":"Messages","params":null},
{"right":"Membership","params":null}
]