Hi,

On 14 Sep 2009, at 02:19, Adam Kocoloski wrote:
As with history, I could see we'd want a document type that is a hybrid of a regular doc and a _local doc, say _db/ for example, that can be replicated conditionally with

POST /_replicate
{source:..,target:...,replicate_db_doc:true}

Interesting idea. I imagine that in the implementation these would be regular documents, but with pattern-matching filters in the replication framework.

From my understanding how _local/ docs are implemented, that'd be the way to go yes, but I might miss a detail or two.


We might take this one step further and allow additional Access Control Elements in individual documents. These ACEs would be prepended to the DB ACL and would allow you to specify custom authz for a subset of documents in a DB without having to resort to path-based regex and editing the DB ACL every time.

Sounds complicated. -1

Finally, there's the issue of authz in views. What privileges does the view indexer have? If a user who is only allowed to read some of the documents in the DB is allowed to upload a _design document, it seems to me that the views generated from that _design document must exclude any forbidden documents. I guess this can work if the _design doc stores the roles of the user who saved it. It seems like a tricky, but solvable problem.

So far we don't have the notion per-doc ACL's. So a user can read all docs in the DB or none, but not some. If we'd go there, I think users that can modify design docs are higher in the auth* chain than users that only can read some documents and thus inherit the role of read-all-docs.

That's true, if per-document ACLs are a -1 as you indicated above then view security becomes far simpler. Does it mean you're also -1 on the path-based regex in the ACL example I wrote? Because that's just an alternative implementation of per-document ACLs.

To clarify, I'm not -1 ACLs, just the "one step further" ACEs. That said, "-1" was a bit strong, your one paragraph description sounded complicated to me and I'd rather keep this simple and working well. Path-based regex is very powerful and useful (*hugs mod_rewrite*), but I'm not sure if that should be part of a _rewrite handler instead of the security model.

I.e I can achieve locking down resources by rewriting and conditionally rewriting URL requests (mod_rewrite) without tapping into any httpd authentication systems. We should think about what scenarios we want to support with any upcoming auth* and _rewrite systems and make sure we are clear about which system supports which scenario and not mix things up.

One of the strengths of CouchDB's design is that is broken down to the bare minimum needed to be useful. I'd like to keep the auth* system that way. Curt has done some great work collecting discussions and related material (http://wiki.apache.org/couchdb/Authentication_and_Authorization ).

Cheers
Jan
--

Reply via email to