Hey Jakob, Thanks so much for your detailed response land this looks pretty neat! We didn't think of creating a channel for each user and then assigning others. Duh!
But if I am not mistaken it doesn't handle removal of users because the already removed user and his channel don't get overwritten once the user is removed. We could identify the removed users as a difference of old doc and doc but then we cannot remove access of the other users of that channel? Thanks Christoph On Apr 3, 2015, at 6:23 AM, Jakob Hoydis <[email protected]<mailto:[email protected]>> wrote: Hi, One option would be to create a channel for every user to which he/she gets access. The channel name is a simple function of the user id, e.g. 'user_'+id. The profile document of a user is the only document in this channel The project document contains an array of the user ids participating in the project, e.g. userList. The sync function will give then every user access to all other user channels as well as to the channel to the project it self.. The sync function could possible look like something like this: function (doc) { switch (doc.type) { case 'profile': channel('user_'+doc.id); //add the profile to the user channel access(doc.id,[ 'user_'+doc.id ]); //give the user access to his/her own channel break; case 'project': channel('project_'+doc.id); //create a channel for the project for (var i=0; i<doc.userList.length;i++) { access(doc.userList[i],['project_'+doc.id]); //give each user access to the project channel for (var j=0; j<doc.userList.length;j++) { if (j !=i ) { access(doc.userList[i],['user_'+doc.userList[j]]); //give each user access to the user channels of all other users } } } break; } } Is this any helpful? Cheers, Jakob On Thursday, April 2, 2015 at 8:46:24 PM UTC+2, Christoph Berlin wrote: Hi everyone, we are struggling a bit a little bit with finding a suitable channel structure for our project. Here are the requirements: 1) Each user has a profile document (first name, last name, user ID, etc.) Those profile documents are initially accessible by the owner only 2) A user can create a project (represented by a project document that has a name, members, etc.) 3) The owner of the document can invite other users to join the project, in this case the members of the projects get added to the project channel So that works, the users have access to the project file but how would we enable access to each user profile document so that users can see each other's information? It seems easy but its not (for us at least)... Another way to look at it, is the couchbase labs chat app. Instead of having all profile be accessible by everyone, how could we limit exposure by adding the chat profiles into a channel. New members would have to be added via email address... Attempts: 1) We initially thought that we add those profile documents to the project channel but that doesn't work because the profile document is not aware of all the projects the owner has access. The project file has a member array but the profile documents don't. We could maintain a manual configuration within the profile document (for example memberships) but that seems kind of backwards and hard to maintain. 2) Another idea was to have the sync function take care of it but that doesn't work because the sync function works on a document basis - meaning only when a document changes it triggers a change. We cannot update a different document than the one who triggered the change. 3) Being tired of it we thought about just ignoring the fact of protecting the profile account and making them public but then they all get synced to each device...and that doesn't seem to make sense as well if you have a million profiles... Does anyone have any ideas how to accomplish this? Any pointer is much appreciated it. Christoph Again: Project document -> creates project channel with members being able to access Profile documents -> profile channel with owner access How to enable sync for all profile documents of the members in the project. -- You received this message because you are subscribed to a topic in the Google Groups "Couchbase Mobile" group. To unsubscribe from this topic, visit https://groups.google.com/d/topic/mobile-couchbase/bYq7K_tfLV8/unsubscribe. To unsubscribe from this group and all its topics, send an email to [email protected]<mailto:[email protected]>. To view this discussion on the web visit https://groups.google.com/d/msgid/mobile-couchbase/32a6308b-f363-4656-8d59-2d22f7b0455f%40googlegroups.com<https://groups.google.com/d/msgid/mobile-couchbase/32a6308b-f363-4656-8d59-2d22f7b0455f%40googlegroups.com?utm_medium=email&utm_source=footer>. For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Couchbase Mobile" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/mobile-couchbase/C73EF66A-E78C-43ED-8E20-D28AD870DC81%40christophberlin.com. For more options, visit https://groups.google.com/d/optout.
