[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/ContentDirective - ContentDirective.py:1.3 meta.zcml:1.2
Jim Fulton
jim@zope.com
Thu, 20 Jun 2002 11:55:17 -0400
Update of /cvs-repository/Zope3/lib/python/Zope/App/ContentDirective
In directory cvs.zope.org:/tmp/cvs-serv15462/lib/python/Zope/App/ContentDirective
Modified Files:
ContentDirective.py meta.zcml
Log Message:
implemented:
http://dev.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/MergeSecurityIntoZopeNamespace
While I was at it, I couldn't resist implementing a variation of:
http://dev.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/SecurityPackageReorg
which was a lot more work.
=== Zope3/lib/python/Zope/App/ContentDirective/ContentDirective.py 1.2 => 1.3 ===
from Zope.Configuration.ConfigurationDirectiveInterfaces \
import INonEmptyDirective
+from Zope.Configuration.Exceptions import ConfigurationError
from Zope.Configuration.Action import Action
import Interface
@@ -56,28 +57,37 @@
]
def require(self, _context,
- permission, attributes=None, interface=None):
+ permission=None, attributes=None, interface=None,
+ like_class=None):
"""Require a the permission to access a specific aspect"""
- r = []
+ if like_class:
+ r = self.__mimic(_context, like_class)
+ else:
+ r = []
if not (interface or attributes):
- # XXX: perhaps raise an error here, as no interface or attributes
- # were given
- return r
+ if r:
+ return r
+ raise ConfigurationError("Nothing required")
+
+ if not permission:
+ raise ConfigurationError("No permission specified")
+
if interface:
self.__protectByInterface(interface, permission, r)
if attributes:
self.__protectNames(attributes, permission, r)
+
return r
- def mimic(self, _context, class_):
+ def __mimic(self, _context, class_):
"""Base security requirements on those of the given class"""
class_to_mimic = _context.resolve(class_)
return [
- Action(discriminator=('security:mimic', self.__class, object()),
+ Action(discriminator=('mimic', self.__class, object()),
callable=protectLikeUnto,
args=(self.__class, class_to_mimic),
)
@@ -128,7 +138,7 @@
def __protectName(self, name, permission_id, r):
"Set a permission on a particular name."
r.append((
- ('security:protectName', self.__class, name),
+ ('protectName', self.__class, name),
protectName, (self.__class, name, permission_id)))
def __protectNames(self, names, permission_id, r):
=== Zope3/lib/python/Zope/App/ContentDirective/meta.zcml 1.1 => 1.2 ===
<subdirective name="implements"
attributes="interface" />
- <subdirective namespace="http://namespaces.zope.org/security"
- name="require"
- attributes="permission attributes interface" />
- <subdirective namespace="http://namespaces.zope.org/security"
- name="allow"
+ <subdirective name="require"
+ attributes="permission attributes interface like_class" />
+ <subdirective name="allow"
attributes="attributes interface" />
- <subdirective namespace="http://namespaces.zope.org/security"
- name="mimic"
- attributes="class" />
<subdirective namespace="http://namespaces.zope.org/zmi"
name="factory"
attributes="id permission title description