[Zope3-dev] Re: ObjectHub should change data structure
Shane Hathaway
shane@zope.com
Fri, 27 Jun 2003 14:32:32 -0400
Phillip J. Eby wrote:
> At 12:28 PM 6/27/03 -0400, Shane Hathaway wrote:
>
>> The project is a CMS with a repository model, where all content goes
>> into a big bucket. The big bucket is an important part of the
>> architecture, since it facilitates staging and sharing content among
>> sections. Yet the customer also needed to be able to confine users to
>> editing objects located in particular sections. Zope's security model
>> made this difficult. We couldn't grant the limited users permissions
>> for the entire repository. Applying local roles to every object in
>> the repository would be a burden, and wouldn't work if there are a lot
>> of users.
>
> This sounds to me like an example of a use case for rule-based security
> (aka "computed local roles" in Zope 2 terminology).
Maybe. Like you, I would *really* prefer storing parent references,
since the current situation imposes large burdens. Virtually everything
needs to be context-wrapped, and that's probably a more intrusive
requirement than storing a parent reference. It also means that ZODB
objects have no way to get their parent, increasing the complexity of Ape.
There is a small number of important places where you need the parentage
to be dynamic, but it would be nice to solve these some way other than
through wrapping. By wrapping so much, we might be making the whole
application suffer to solve the needs of a few rare components.
Brainstorming...
- Copy objects out of the database when you want them to appear in a
different context. Assign the copies to a special data manager (_p_jar)
that copies all changes back to the real database (except changes to the
parentage). Then change parentage in the copies. With some
optimization and caching of copies, this might work, and might require
no changes to ZODB.
- Open multiple ZODB connections in a single thread to work with objects
in multiple contexts. Like the first idea, the objects from each
connection must be kept in sync, but ZODB itself would manage the
copying and caching.
- Restrict objects to having only one context per thread. We would need
some kind of _p_parent attribute and a way to prevent threads from
trying to use an object in multiple contexts simultaneously. If this
works, it will probably be a pretty simple solution.
Shane