[Checkins]
SVN: Products.GenericSetup/branches/1.3/Products/GenericSetup/rolemap.py
Allow import of permissions mapped to no roles (cp from trunk)
Laurence Rowe
l at lrowe.co.uk
Thu Dec 6 13:00:59 EST 2007
Log message for revision 82167:
Allow import of permissions mapped to no roles (cp from trunk)
Changed:
D Products.GenericSetup/branches/1.3/Products/GenericSetup/rolemap.py
A Products.GenericSetup/branches/1.3/Products/GenericSetup/rolemap.py
-=-
Deleted: Products.GenericSetup/branches/1.3/Products/GenericSetup/rolemap.py
===================================================================
--- Products.GenericSetup/branches/1.3/Products/GenericSetup/rolemap.py 2007-12-06 17:58:50 UTC (rev 82166)
+++ Products.GenericSetup/branches/1.3/Products/GenericSetup/rolemap.py 2007-12-06 18:00:59 UTC (rev 82167)
@@ -1,227 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 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.
-#
-##############################################################################
-""" GenericSetup: Role-permission export / import
-
-$Id$
-"""
-
-from AccessControl import ClassSecurityInfo
-from AccessControl.Permission import Permission
-from Globals import InitializeClass
-from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-
-from permissions import ManagePortal
-from utils import _xmldir
-from utils import ExportConfiguratorBase
-from utils import ImportConfiguratorBase
-from utils import CONVERTER, DEFAULT, KEY
-
-
-#
-# Configurator entry points
-#
-_FILENAME = 'rolemap.xml'
-
-def importRolemap( context ):
-
- """ Import roles / permission map from an XML file.
-
- o 'context' must implement IImportContext.
-
- o Register via Python:
-
- registry = site.setup_tool.setup_steps
- registry.registerStep( 'importRolemap'
- , '20040518-01'
- , Products.GenericSetup.rolemap.importRolemap
- , ()
- , 'Role / Permission import'
- , 'Import additional roles, and map '
- 'roles to permissions'
- )
-
- o Register via XML:
-
- <setup-step id="importRolemap"
- version="20040518-01"
- handler="Products.GenericSetup.rolemap.importRolemap"
- title="Role / Permission import"
- >Import additional roles, and map roles to permissions.</setup-step>
-
- """
- site = context.getSite()
- encoding = context.getEncoding()
- logger = context.getLogger('rolemap')
-
- if context.shouldPurge():
-
- items = site.__dict__.items()
-
- for k, v in items: # XXX: WAAA
-
- if k == '__ac_roles__':
- delattr( site, k )
-
- if k.startswith( '_' ) and k.endswith( '_Permission' ):
- delattr( site, k )
-
- text = context.readDataFile( _FILENAME )
-
- if text is not None:
-
- rc = RolemapImportConfigurator(site, encoding)
- rolemap_info = rc.parseXML( text )
-
- immediate_roles = list( getattr(site, '__ac_roles__', []) )
- already = {}
-
- for role in site.valid_roles():
- already[ role ] = 1
-
- for role in rolemap_info[ 'roles' ]:
-
- if already.get( role ) is None:
- immediate_roles.append( role )
- already[ role ] = 1
-
- immediate_roles.sort()
- site.__ac_roles__ = tuple( immediate_roles )
-
- for permission in rolemap_info[ 'permissions' ]:
-
- site.manage_permission( permission[ 'name' ]
- , permission[ 'roles' ]
- , permission[ 'acquire' ]
- )
-
- logger.info('Role / permission map imported.')
-
-
-def exportRolemap( context ):
-
- """ Export roles / permission map as an XML file
-
- o 'context' must implement IExportContext.
-
- o Register via Python:
-
- registry = site.setup_tool.export_steps
- registry.registerStep( 'exportRolemap'
- , Products.GenericSetup.rolemap.exportRolemap
- , 'Role / Permission export'
- , 'Export additional roles, and '
- 'role / permission map '
- )
-
- o Register via XML:
-
- <export-script id="exportRolemap"
- version="20040518-01"
- handler="Products.GenericSetup.rolemap.exportRolemap"
- title="Role / Permission export"
- >Export additional roles, and role / permission map.</export-script>
-
- """
- site = context.getSite()
- logger = context.getLogger('rolemap')
-
- rc = RolemapExportConfigurator(site).__of__(site)
- text = rc.generateXML()
-
- context.writeDataFile( _FILENAME, text, 'text/xml' )
-
- logger.info('Role / permission map exported.')
-
-
-class RolemapExportConfigurator(ExportConfiguratorBase):
-
- """ Synthesize XML description of sitewide role-permission settings.
- """
- security = ClassSecurityInfo()
-
- security.declareProtected( ManagePortal, 'listRoles' )
- def listRoles( self ):
-
- """ List the valid role IDs for our site.
- """
- return self._site.valid_roles()
-
- security.declareProtected( ManagePortal, 'listPermissions' )
- def listPermissions( self ):
-
- """ List permissions for export.
-
- o Returns a sqeuence of mappings describing locally-modified
- permission / role settings. Keys include:
-
- 'permission' -- the name of the permission
-
- 'acquire' -- a flag indicating whether to acquire roles from the
- site's container
-
- 'roles' -- the list of roles which have the permission.
-
- o Do not include permissions which both acquire and which define
- no local changes to the acquired policy.
- """
- permissions = []
- valid_roles = self.listRoles()
-
- for perm in self._site.ac_inherited_permissions( 1 ):
-
- name = perm[ 0 ]
- p = Permission( name, perm[ 1 ], self._site )
- roles = p.getRoles( default=[] )
- acquire = isinstance( roles, list ) # tuple means don't acquire
- roles = [ r for r in roles if r in valid_roles ]
- roles.sort()
-
- if roles or not acquire:
- permissions.append( { 'name' : name
- , 'acquire' : acquire
- , 'roles' : roles
- } )
-
- return permissions
-
- def _getExportTemplate(self):
-
- return PageTemplateFile('rmeExport.xml', _xmldir)
-
-InitializeClass(RolemapExportConfigurator)
-
-
-class RolemapImportConfigurator(ImportConfiguratorBase):
-
- """ Synthesize XML description of sitewide role-permission settings.
- """
- security = ClassSecurityInfo()
-
- def _getImportMapping(self):
-
- return {
- 'rolemap':
- { 'roles': {CONVERTER: self._convertToUnique, DEFAULT: ()},
- 'permissions': {CONVERTER: self._convertToUnique} },
- 'roles':
- { 'role': {KEY: None} },
- 'role':
- { 'name': {KEY: None} },
- 'permissions':
- { 'permission': {KEY: None, DEFAULT: ()} },
- 'permission':
- { 'name': {},
- 'role': {KEY: 'roles'},
- 'acquire': {CONVERTER: self._convertToBoolean} } }
-
-InitializeClass(RolemapImportConfigurator)
Copied: Products.GenericSetup/branches/1.3/Products/GenericSetup/rolemap.py (from rev 82166, Products.GenericSetup/trunk/Products/GenericSetup/rolemap.py)
===================================================================
--- Products.GenericSetup/branches/1.3/Products/GenericSetup/rolemap.py (rev 0)
+++ Products.GenericSetup/branches/1.3/Products/GenericSetup/rolemap.py 2007-12-06 18:00:59 UTC (rev 82167)
@@ -0,0 +1,227 @@
+##############################################################################
+#
+# Copyright (c) 2004 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.
+#
+##############################################################################
+""" GenericSetup: Role-permission export / import
+
+$Id$
+"""
+
+from AccessControl import ClassSecurityInfo
+from AccessControl.Permission import Permission
+from Globals import InitializeClass
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+
+from permissions import ManagePortal
+from utils import _xmldir
+from utils import ExportConfiguratorBase
+from utils import ImportConfiguratorBase
+from utils import CONVERTER, DEFAULT, KEY
+
+
+#
+# Configurator entry points
+#
+_FILENAME = 'rolemap.xml'
+
+def importRolemap( context ):
+
+ """ Import roles / permission map from an XML file.
+
+ o 'context' must implement IImportContext.
+
+ o Register via Python:
+
+ registry = site.setup_tool.setup_steps
+ registry.registerStep( 'importRolemap'
+ , '20040518-01'
+ , Products.GenericSetup.rolemap.importRolemap
+ , ()
+ , 'Role / Permission import'
+ , 'Import additional roles, and map '
+ 'roles to permissions'
+ )
+
+ o Register via XML:
+
+ <setup-step id="importRolemap"
+ version="20040518-01"
+ handler="Products.GenericSetup.rolemap.importRolemap"
+ title="Role / Permission import"
+ >Import additional roles, and map roles to permissions.</setup-step>
+
+ """
+ site = context.getSite()
+ encoding = context.getEncoding()
+ logger = context.getLogger('rolemap')
+
+ if context.shouldPurge():
+
+ items = site.__dict__.items()
+
+ for k, v in items: # XXX: WAAA
+
+ if k == '__ac_roles__':
+ delattr( site, k )
+
+ if k.startswith( '_' ) and k.endswith( '_Permission' ):
+ delattr( site, k )
+
+ text = context.readDataFile( _FILENAME )
+
+ if text is not None:
+
+ rc = RolemapImportConfigurator(site, encoding)
+ rolemap_info = rc.parseXML( text )
+
+ immediate_roles = list( getattr(site, '__ac_roles__', []) )
+ already = {}
+
+ for role in site.valid_roles():
+ already[ role ] = 1
+
+ for role in rolemap_info[ 'roles' ]:
+
+ if already.get( role ) is None:
+ immediate_roles.append( role )
+ already[ role ] = 1
+
+ immediate_roles.sort()
+ site.__ac_roles__ = tuple( immediate_roles )
+
+ for permission in rolemap_info[ 'permissions' ]:
+
+ site.manage_permission( permission[ 'name' ]
+ , permission.get('roles', [])
+ , permission[ 'acquire' ]
+ )
+
+ logger.info('Role / permission map imported.')
+
+
+def exportRolemap( context ):
+
+ """ Export roles / permission map as an XML file
+
+ o 'context' must implement IExportContext.
+
+ o Register via Python:
+
+ registry = site.setup_tool.export_steps
+ registry.registerStep( 'exportRolemap'
+ , Products.GenericSetup.rolemap.exportRolemap
+ , 'Role / Permission export'
+ , 'Export additional roles, and '
+ 'role / permission map '
+ )
+
+ o Register via XML:
+
+ <export-script id="exportRolemap"
+ version="20040518-01"
+ handler="Products.GenericSetup.rolemap.exportRolemap"
+ title="Role / Permission export"
+ >Export additional roles, and role / permission map.</export-script>
+
+ """
+ site = context.getSite()
+ logger = context.getLogger('rolemap')
+
+ rc = RolemapExportConfigurator(site).__of__(site)
+ text = rc.generateXML()
+
+ context.writeDataFile( _FILENAME, text, 'text/xml' )
+
+ logger.info('Role / permission map exported.')
+
+
+class RolemapExportConfigurator(ExportConfiguratorBase):
+
+ """ Synthesize XML description of sitewide role-permission settings.
+ """
+ security = ClassSecurityInfo()
+
+ security.declareProtected( ManagePortal, 'listRoles' )
+ def listRoles( self ):
+
+ """ List the valid role IDs for our site.
+ """
+ return self._site.valid_roles()
+
+ security.declareProtected( ManagePortal, 'listPermissions' )
+ def listPermissions( self ):
+
+ """ List permissions for export.
+
+ o Returns a sqeuence of mappings describing locally-modified
+ permission / role settings. Keys include:
+
+ 'permission' -- the name of the permission
+
+ 'acquire' -- a flag indicating whether to acquire roles from the
+ site's container
+
+ 'roles' -- the list of roles which have the permission.
+
+ o Do not include permissions which both acquire and which define
+ no local changes to the acquired policy.
+ """
+ permissions = []
+ valid_roles = self.listRoles()
+
+ for perm in self._site.ac_inherited_permissions( 1 ):
+
+ name = perm[ 0 ]
+ p = Permission( name, perm[ 1 ], self._site )
+ roles = p.getRoles( default=[] )
+ acquire = isinstance( roles, list ) # tuple means don't acquire
+ roles = [ r for r in roles if r in valid_roles ]
+ roles.sort()
+
+ if roles or not acquire:
+ permissions.append( { 'name' : name
+ , 'acquire' : acquire
+ , 'roles' : roles
+ } )
+
+ return permissions
+
+ def _getExportTemplate(self):
+
+ return PageTemplateFile('rmeExport.xml', _xmldir)
+
+InitializeClass(RolemapExportConfigurator)
+
+
+class RolemapImportConfigurator(ImportConfiguratorBase):
+
+ """ Synthesize XML description of sitewide role-permission settings.
+ """
+ security = ClassSecurityInfo()
+
+ def _getImportMapping(self):
+
+ return {
+ 'rolemap':
+ { 'roles': {CONVERTER: self._convertToUnique, DEFAULT: ()},
+ 'permissions': {CONVERTER: self._convertToUnique} },
+ 'roles':
+ { 'role': {KEY: None} },
+ 'role':
+ { 'name': {KEY: None} },
+ 'permissions':
+ { 'permission': {KEY: None, DEFAULT: ()} },
+ 'permission':
+ { 'name': {},
+ 'role': {KEY: 'roles'},
+ 'acquire': {CONVERTER: self._convertToBoolean} } }
+
+InitializeClass(RolemapImportConfigurator)
More information about the Checkins
mailing list