[Zope-dev] method attribute __roles__ in Zope 2.8

Jim Fulton jim at zope.com
Mon Feb 21 09:00:04 EST 2005


Andreas Jung wrote:
> I can across the following problem while trying to fix the broken FTP 
> service for Zope 2.8:
> 
> ObjectManager.manage_FTPstat() tries to access 
> self.manage_FTPlist.__roles__ whose
> value is ('Manager',') in Zope 2.7. In 2.8 this attribute is not 
> available. Can someone  explain
> how and where is attribute in set Zope 2.7 and why it is no longer 
> available in Zope 2.8 (has
> it anything to do with new-style classes in 2.8).

Dieter's response is right.  Classic extenstion classes
had a method-attribute mechanism that isn't available in new-style
extension classes.

There is a new API for getting the roles for an object:

   from AcessControl.ZopeSecurityPolicy import getRoles

Now, suppose we wanted the roles for attribute 'x' on an
object:

   roles = getRoles(ob, 'x', ob.x)

This works for methods *and* for other objects that
don't have their own '__roles__' attribute.  For example,
it could be used for attributes whos values are strings.
It means that you can now protect *any* attribute.  Technically,
there is no longer a need for "unprotected subobjects".  In this
regard, Zope 2 has become a litte bit more like Zope 3.

It also works for objects that do have theor own __roles__
attribute.  It actually checkes for a __roles__ attribute on
the third object passed.

For now, this api is the prefered way to do what you want.

Jim

-- 
Jim Fulton           mailto:jim at zope.com       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org


More information about the Zope-Dev mailing list