On 14 Sep 2010, at 03:26, J Chris Anderson wrote: > > On Sep 13, 2010, at 6:23 PM, Simon Metson wrote: > >> Hi James. >> I think the thing to do is require that a document has a user field, >> and that the value of that field matches the userCtx in the >> validate_doc_update function. This then pushes the issue client side, and >> makes the servers life easier. It could also be added by the front end >> apache in the case of our deployment, I think. I can see this sort of >> trigger thing being a good way of giving people a loaded gun aimed at their >> foot, they certainly are in Oracle if you're not careful. >> Cheers >> Simon > > The big issue is that any code which runs on normal document updates, will > also run during replication, as replication is just a normal client. So this > means that adding a field will happen not just on the original client PUT but > also when replication happens. > > This is why _update is a separate handler.
Adding a required field should be idempotent (correct me if I am wrong) so it doesn't matter that replication is an agent of the user. In the past we talked about "blessing" a ddoc / update function that would magically invoke the update function on every write. (analog for _show and _list) and people seem to like to explore that idea. That said, the "magic" bit worries me a little :) Cheers Jan -- > > Chris > >> >> On 9 Sep 2010, at 05:19, James Jackson wrote: >> >>> Hi all, >>> >>> Moving this from the users forum, as it appears what I'm after isn't >>> currently available. For the security model I with to implement in a >>> production CouchDB cluster, I would like to be able to force a field to be >>> written to all docs based on the user context. The _update functionality is >>> not what I am after as it requires the user to actually call it when >>> writing a document (means security could be got-around by not calling this, >>> and setting the required field in the passed document to something >>> arbitrary, which would then not get caught by a validation function), and >>> can't modify a document which is passed to it (as far as I can tell it can >>> only modify existing documents, or create new ones). >>> >>> I see this ticket: >>> >>> https://issues.apache.org/jira/browse/COUCHDB-441 >>> >>> which talks about the functionality I am after, but appears to have morphed >>> into what is now there. >>> >>> I am willing to implement such functionality, if it already doesn't exist, >>> but wonder if this would be welcome in the trunk, or if there are killer >>> pitfalls which stop this being possible. I note that in the discussion on >>> that ticket there is talk of how to deal with multiple such modify-on-write >>> functions, perhaps this is one area that needs discussion? >>> >>> In any case, I'll probably implement this for our CouchDB installation, but >>> it would be good to make it generic and globally useful such that I can >>> contribute it back. I know of a number of people who would like this >>> functionality... >>> >>> Regards, >>> James. >> >