[Zope-dev] Owner Role and ZCatalog

Brian Lloyd Brian@digicool.com
Thu, 2 Sep 1999 10:10:19 -0400


> Zopists,
> 
> Does anyone know if the ZCatalog catalog's the Owner role of 
> an object. 
> This sounds strange, but I'd like someone to only search their own
> stuff.  Is that possible?  Is Owner a searchable indexable 
> item?  Michel?
> 
> Jason Spisak

Jason,

This is possible - currently you have to do a little bit of
work to make it happen though. Ownership is basically a 
convention - when an object is created, the user who created
the object is given the "Owner" local role on the object
automatically. While there is currently no built-in API call
to get the "owner" of an object (ownership is still kind of
new, so we are letting it percolate before providing a formalized
ownership api), here is an example external method that will
give you the names of the users who have the "Owner" role on
a given object. Note that there can be more than one, since
site managers can go into an object and give multiple users
the "Owner" local role on an object just as they could with
any other local role.


def owner(self):
    """Return a space-separated string of user names 
       who have the local Owner role on an object."""
    parent=self.aq_parent
    roles=parent.aq_acquire('__ac_local_roles__')
    dict=roles or {}
    items=[]
    for key, val in dict.items():
        if 'Owner' in val:
            items.append(key)
    return string.join(items, ' ')


You can either use this as an external method at the top of your
site that objects can acquire, or add it to your ZClass definitions
if you are indexing ZClass instances. That should effectively give
your objects an "owner" method that the Catalog can use.

Next, you need to create an "owner" index in your Catalog (you
probably want to make this a Text Index instead of a field index
so that you can search for a single name and find it though there
may be multiple owners).

Hope this helps!


Brian Lloyd        brian@digicool.com
Software Engineer  540.371.6909              
Digital Creations  http://www.digicool.com