> On Feb 27, 2019, at 3:01 PM, Michael Fair <mich...@daclubhouse.net> wrote:
> 
> On Wed, Feb 27, 2019 at 10:36 AM Adam Kocoloski <kocol...@apache.org> wrote:
> 
>> Hi Mike, just picking out this one snippet:
>> 
>>> On Feb 27, 2019, at 12:16 PM, Michael Fair <mich...@daclubhouse.net>
>> wrote:
>>> 
>>> If I get a replica of a database from your server, what, if anything,
>>> prevents me from granting myself access controls to the entire database?
>> 
>> Replication is a client of the API like everyone else and cannot bypass
>> the access controls on the source. You can only create a replication which
>> has at most access to all the documents in the database that you can access
>> yourself; i.e. a replication of a database with per-doc access controls
>> enabled may only transfer a subset of the documents in the database.
>> 
> 
> Right, but generally speaking READ access is very prevalent, WRITE access
> is much more restrictive.
> 
> Or are these "access controls" really just the binary "exposed"/"not
> exposed" sort such that had these documents simply gone into a different
> database in the first place, and the view indexes tracked in a "per
> database" way then everything would work as expected?
> 
> In fact, maybe "the same doc in multiple user centered databases" is not
> such a bad idea/model to consider.
> 
> Currently, I see this idea in Couch that documents belong to a particular
> "named document collection" called a database.  A view is really just
> another kind of "named document collection".
> 
> What if instead of a "database", there was simply the single universal
> document store and a "database" is then more like a "view" that documents
> became a member of just like a user's access controlled "slice" would be?
> (i.e. the dbname becomes more like of a document access filter and less a
> grouping and storage boundary)
> 
> Users then have a "per user scope/database" which they always access
> through when they connect to the server.
> The top level list of "_databases" the user sees is actually just a list of
> those "named collections" that the user can access.  To the client side
> APIs nothing really changes for them, what changes is how Couch internally
> organizes itself to make "databases" a construct of the access control
> feature and no longer a structural primitive.
> 
> Documents now carry the information about what "named collections" they
> belong to in the same way as what entities are authorized to access them,
> and "databases" basically become a "view" grouping by the "_collections"
> array field member values on each document.
> 
> 
> Many people have requested the option to expose the same document to
> multiple databases and then use database access rights to enforce per user
> access and share documents between users.  I've even wanted this feature
> from time to time.  If views have to be modified to hide unauthorized
> documents anyway, this seems a perfect opportunity to address this at the
> same time...
> 
> 
> .........
> In this model, a "document collection", whether it be a database, a user, a
> user group, a role, or a role group becomes the entity that the access
> control documents are "authorizing".
> 
> In this model, a "view" becomes an identifiable "collection" that can be
> treated like a database.
> Which would make creating views on top of other views becomes something
> much easier to define/express.
> 
> 
> I'm envisioning that to implement successful "access control" based views,
> each "authorized entity" would have to maintain its own view index.
> Otherwise it's really hard for me to imagine how a reduce function can
> cache any precomputed results because it has no way of knowing that all the
> underlying documents used in the reduce were authorized for the accessing
> entity...  All reduce functions would have to run in real time to ensure it
> is only using authorized documents...
> 
> If there were a separate index for each authorized entity though (and
> especially if these entities were able to share index buckets where they
> had all the same document access in common), then the reduce function would
> cache data based on each authorized entity because it'd be built up from a
> different view index.
> 
> The existing model where indexes are updated whenever they are accessed
> could remain in tact because you wouldn't have to rebuild indeces for
> entities that weren't accessing that view...
> 
> This might be what is already planned (it hasn't sounded like it to me
> though).
> And I definitely think changing the perspective to make "databases" a
> function of the access control system and to make views based on "access
> controlled collection results" instead of "databases" would be quite
> powerful...
> 
> Regards,
> Mike

Hi Mike, what you’ve described here is very very similar to what Jan is 
building.

Adam

Reply via email to