[ZCM] [ZC] 77/ 2 Resolve "allow_module in Zope2.5b2"

Collector: Zope Bugs and Patches ... zope-coders@zope.org
Fri, 15 Feb 2002 14:02:53 -0500


Issue #77 Update (Resolve) "allow_module in Zope2.5b2"
 Status Resolved, Zope/bug medium
To followup, visit:
  http://collector.zope.org/Zope/77

==============================================================
= Resolve - Entry #2 by evan on Feb 15, 2002 2:02 pm

 Status: Pending => Resolved

This should be fixed in 2.5.  The best way (apart from inline declarations in Formulator) to declare the security is the following:

from AccessControl import ModuleSecurityInfo, allow_class
ModuleSecurityInfo('Products.Formulator').declarePublic('StringField')
ModuleSecurityInfo('Products.Formulator.Form').declarePublic(
 'FormValidationError', 'BasicForm')
from Products.Formulator.StandardFields import StringField
from Products.Formulator.Form import FormValidationError, BasicForm
allow_class(StringField)
allow_class(FormValidationError)
allow_class(BasicForm)
________________________________________
= Request - Entry #1 by Anonymous User on Dec 7, 2001 11:52 am

trying to make a simpler version of this i witnessed ChrisM's security stomping on each other.  This works just fine in Zope2.4.x but raised Unauhtorized Excpetion (at the tail of this report)

You need to download Formulator, and create a ScriptAllow Product in its __init__.py add
from Products.PythonScripts.Utility import allow_module, allow_class
allow_module('Products')
allow_module('Products.Formulator')
allow_module('Products.Formulator.Form')
from Products.Formulator.StandardFields import StringField
from Products.Formulator.Form import FormValidationError, BasicForm
allow_class(StringField)
allow_class(FormValidationError)
allow_class(BasicForm)

in the a Script(Python), process_form (parameters: REQUEST)

from Products.Formulator.Form import FormValidationError
from Products.Formulator.Form import BasicForm
from Products.Formulator import StandardFields
errors={} #mapping containing errors (keys), messages (values)
foo=StandardFields.StringField('foo', title='foo', required=1, display_width=20, max_length=20)
f=BasicForm()
f.add_fields( (foo,) )
#result=f.validate_all(context.REQUEST)
try:
    result=f.validate_all(context.REQUEST)
except FormValidationError, e:
    for error in e.errors:
        errors[error.field.get_value('title')]=error.error_text
    REQUEST.set('errors', errors)
    return context.testValidator(context, context.REQUEST)
return 'all fields valid'


#--- traceback garnsihed
Error Type: Unauthorized
Error Value: You are not allowed to access Formulator in this context

Traceback (innermost last):
  File E:\zope25b2\lib\python\ZPublisher\Publish.py, line 151, in publish_module
  File E:\zope25b2\lib\python\ZPublisher\Publish.py, line 115, in publish
  File E:\zope25b2\lib\python\Zope\__init__.py, line 158, in zpublisher_exception_hook
    (Object: simpleValidator)
  File E:\zope25b2\lib\python\ZPublisher\Publish.py, line 99, in publish
  File E:\zope25b2\lib\python\ZPublisher\mapply.py, line 88, in mapply
    (Object: process_form)
  File E:\zope25b2\lib\python\ZPublisher\Publish.py, line 40, in call_object
    (Object: process_form)
  File E:\zope25b2\lib\python\Shared\DC\Scripts\Bindings.py, line 252, in __call__
    (Object: process_form)
  File E:\zope25b2\lib\python\Shared\DC\Scripts\Bindings.py, line 283, in _bindAndExec
    (Object: process_form)
  File E:\zope25b2\lib\python\Products\PythonScripts\PythonScript.py, line 291, in _exec
    (Object: process_form)
    (Info: ({'script': <PythonScript instance at 02438FB8>, 'context': <Folder instance at 01A390E8>, 'container': <Folder instance at 01A390E8>, 'traverse_subpath': []}, (), {}, None))
  File Script (Python), line 1, in process_form
    (Object: guard)
  File E:\zope25b2\lib\python\AccessControl\ZopeGuards.py, line 131, in guarded_import
  File E:\zope25b2\lib\python\AccessControl\ZopeGuards.py, line 170, in load_module
    (Object: Products)
  File E:\zope25b2\lib\python\AccessControl\SecurityManager.py, line 83, in validate
  File E:\zope25b2\lib\python\AccessControl\ZopeSecurityPolicy.py, line 145, in validate
Unauthorized: (see above)

==============================================================