quick search:
 

Programmatically Generate REQUEST

Submitted by: runyaga
Last Edited: 2004-10-14

Category: CMF

Average rating is: 0.0 out of 5 (0 ratings)

Description:
Often you need a REQUEST which will contain some
security information so that Zope security
machinery will be satisfied. This originally was
taken from CMF unit tests. Used on plone.org


Source (Text):
from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManager import setSecurityPolicy
from Testing.makerequest import makerequest
from Products.CMFCore.tests.base.security import PermissiveSecurityPolicy, AnonymousUser, OmnipotentUser

_policy=PermissiveSecurityPolicy()
_oldpolicy=setSecurityPolicy(_policy)
newSecurityManager(None, OmnipotentUser().__of__(app))
app=makerequest(app)

# 'app' is the Applicaton root object, / in the ZMI

Explanation:
Typically this is used in tests or during
interactive sessions in Zope. i.e. $INSTANCE/bin/zopectl debug
Zope's SecurityPolicies are pluggabke. I'm not sure how many
people use this feature; but you create a Policy. Enable the
policy, then setup a newSecurityManager and then wrap the app
object or whatever object you want with a request. I would
appreciate someone more knowledgeable with security to explain this
a bit more.


Comments:

minor correction by dreamcatcher - 2004-10-14
The user needs to be wrapped into a User Folder, not Application Root.
Corrected (and simplified) version below:

from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManager import setSecurityPolicy
from Testing.makerequest import makerequest
from Products.CMFCore.tests.base.security import PermissiveSecurityPolicy, OmnipotentUser

_policy=PermissiveSecurityPolicy()
_oldpolicy=setSecurityPolicy(_policy)
newSecurityManager(None, OmnipotentUser().__of__(app.acl_users))
app=makerequest(app)