[Checkins] SVN: Sandbox/faassen/zope.site/trunk/src/zope/site/contentdirective.py This isn't part of zope.site.
Martijn Faassen
faassen at infrae.com
Tue Jan 27 07:01:40 EST 2009
Log message for revision 95133:
This isn't part of zope.site.
Changed:
D Sandbox/faassen/zope.site/trunk/src/zope/site/contentdirective.py
-=-
Deleted: Sandbox/faassen/zope.site/trunk/src/zope/site/contentdirective.py
===================================================================
--- Sandbox/faassen/zope.site/trunk/src/zope/site/contentdirective.py 2009-01-27 11:59:04 UTC (rev 95132)
+++ Sandbox/faassen/zope.site/trunk/src/zope/site/contentdirective.py 2009-01-27 12:01:40 UTC (rev 95133)
@@ -1,172 +0,0 @@
-#############################################################################
-#
-# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-##############################################################################
-""" Register class directive.
-
-$Id$
-"""
-__docformat__ = 'restructuredtext'
-
-from types import ModuleType
-
-from zope.component.interfaces import IFactory
-from zope.component.factory import Factory
-from zope.component.interface import provideInterface
-from zope.component.zcml import utility
-from zope.interface import classImplements
-from zope.schema.interfaces import IField
-from zope.configuration.exceptions import ConfigurationError
-
-from zope.app.security.protectclass import protectLikeUnto, protectName
-from zope.app.security.protectclass import protectSetAttribute
-
-PublicPermission = 'zope.Public'
-
-def dottedName(klass):
- if klass is None:
- return 'None'
- return klass.__module__ + '.' + klass.__name__
-
-class ProtectionDeclarationException(Exception):
- """Security-protection-specific exceptions."""
- pass
-
-class ClassDirective(object):
-
- def __init__(self, _context, class_):
- self.__id = dottedName(class_)
- self.__class = class_
- if isinstance(self.__class, ModuleType):
- raise ConfigurationError('Content class attribute must be a class')
- self.__context = _context
-
- def implements(self, _context, interface):
- for interface in interface:
- _context.action(
- discriminator = (
- 'ContentDirective', self.__class, object()),
- callable = classImplements,
- args = (self.__class, interface),
- )
- _context.action(
- discriminator = None,
- callable = provideInterface,
- args = (interface.__module__ + '.' + interface.getName(),
- interface)
- )
-
- def require(self, _context,
- permission=None, attributes=None, interface=None,
- like_class=None, set_attributes=None, set_schema=None):
- """Require a permission to access a specific aspect"""
- if like_class:
- self.__mimic(_context, like_class)
-
- if not (interface or attributes or set_attributes or set_schema):
- if like_class:
- return
- raise ConfigurationError("Nothing required")
-
- if not permission:
- raise ConfigurationError("No permission specified")
-
- if interface:
- for i in interface:
- if i:
- self.__protectByInterface(i, permission)
- if attributes:
- self.__protectNames(attributes, permission)
- if set_attributes:
- self.__protectSetAttributes(set_attributes, permission)
- if set_schema:
- for s in set_schema:
- self.__protectSetSchema(s, permission)
-
- def __mimic(self, _context, class_):
- """Base security requirements on those of the given class"""
- _context.action(
- discriminator=('mimic', self.__class, object()),
- callable=protectLikeUnto,
- args=(self.__class, class_),
- )
-
- def allow(self, _context, attributes=None, interface=None):
- """Like require, but with permission_id zope.Public"""
- return self.require(_context, PublicPermission, attributes, interface)
-
- def __protectByInterface(self, interface, permission_id):
- "Set a permission on names in an interface."
- for n, d in interface.namesAndDescriptions(1):
- self.__protectName(n, permission_id)
- self.__context.action(
- discriminator = None,
- callable = provideInterface,
- args = (interface.__module__ + '.' + interface.getName(),
- interface)
- )
-
- def __protectName(self, name, permission_id):
- "Set a permission on a particular name."
- self.__context.action(
- discriminator = ('protectName', self.__class, name),
- callable = protectName,
- args = (self.__class, name, permission_id)
- )
-
- def __protectNames(self, names, permission_id):
- "Set a permission on a bunch of names."
- for name in names:
- self.__protectName(name, permission_id)
-
- def __protectSetAttributes(self, names, permission_id):
- "Set a permission on a bunch of names."
- for name in names:
- self.__context.action(
- discriminator = ('protectSetAttribute', self.__class, name),
- callable = protectSetAttribute,
- args = (self.__class, name, permission_id)
- )
-
- def __protectSetSchema(self, schema, permission_id):
- "Set a permission on a bunch of names."
- _context = self.__context
- for name in schema:
- field = schema[name]
- if IField.providedBy(field) and not field.readonly:
- _context.action(
- discriminator = ('protectSetAttribute', self.__class, name),
- callable = protectSetAttribute,
- args = (self.__class, name, permission_id)
- )
- _context.action(
- discriminator = None,
- callable = provideInterface,
- args = (schema.__module__ + '.' + schema.getName(),
- schema)
- )
-
- def __call__(self):
- "Handle empty/simple declaration."
- return ()
-
- def factory(self, _context, id=None, title="", description=''):
- """Register a zmi factory for this class"""
-
- id = id or self.__id
- factoryObj = Factory(self.__class, title, description)
-
- # note factories are all in one pile, utilities and content,
- # so addable names must also act as if they were all in the
- # same namespace, despite the utilities/content division
- utility(_context, IFactory, factoryObj,
- permission=PublicPermission, name=id)
More information about the Checkins
mailing list