“Giftr” is an extremely simple gift-list app: I write a list of things I want, share it with other people (my family, friends), and the other people in my group can add comments that all of them can see but I can’t see. Each person in the group can similarly write their own list.
The author released it as a Sandstorm app. Sandstorm handles user identities, login, and sharing of “grains” of data. A grain is a smallish unit of my data, such as a photo album, managed by exactly one app, that I might or might not share. Sharing means giving another user access to my grain, and that access could be anything from full privileges to add, edit and delete data (photos, metadata, etc.) or any lesser level of access such as just commenting on existing photos. What levels of shared access are offered depends on how the app has been programmed.
As a demo app for Sandstorm, Giftr doesn’t work in the right way. It creates a grain (my grain, owned by me) which it calls a “Giftr group”, which not only holds my list but also invites the other members of my group to create their lists inside it, inside my grain.
Instead, when Giftr invites the friend (with whom I shared my grain containing my list) to create their own list, it should create it in a new grain that they will own, and reciprocally share access to that grain back to me.
Furthermore, if I have already shared with a group (more people than just that friend), the new grain should automatically be shared with the same group of people, in order to make joining the group work in the same easy way that it currently works inside Giftr.
Now, this is where I wonder if Sandstorm needs to add support for sharing to a group, or if enough mechanism is available that it could be programmed within the app. It depends on exactly what we mean by “a group”. My grain may be able to tell the friend’s new grain the set of people to whom my grain has been directly shared, at this moment. But the way we expect a group to behave is that when we invite a new member to join the group, all members will be equally linked. The group membership list must therefore be agreed between all members, so either the membership list is a single distinct object (perhaps owned by one member, perhaps not) or the members each keep their own membership list and have a way to synchronize. This surely is a well known general problem in computer science, with well known solutions.
Does Sandstorm already have something, or if not then what solutions could fit into Sandstorm?