[CMF-checkins] CVS: CMF/CMFSetup - rolemap.py:1.1 __init__.py:1.2

Tres Seaver tseaver at zope.com
Tue May 18 15:55:26 EDT 2004


Update of /cvs-repository/CMF/CMFSetup
In directory cvs.zope.org:/tmp/cvs-serv26621

Modified Files:
	__init__.py 
Added Files:
	rolemap.py 
Log Message:



  - Add exporter for role-permission map, and tests.


=== Added File CMF/CMFSetup/rolemap.py ===
""" CMFSetup:  Role-permission export / import

$Id: rolemap.py,v 1.1 2004/05/18 19:54:52 tseaver Exp $
"""

from AccessControl import ClassSecurityInfo
from AccessControl.Permission import Permission
from Acquisition import Implicit
from Globals import InitializeClass
from Products.PageTemplates.PageTemplateFile import PageTemplateFile

from permissions import ManagePortal
from utils import _xmldir

#
# Export
#
class RolemapExporter( Implicit ):

    """ Synthesize XML description of sitewide role-permission settings.
    """
    security = ClassSecurityInfo()   
    security.setDefaultAccess( 'allow' )
    
    def __init__( self, site ):
        self.site = site

    _rolemap = PageTemplateFile( 'rmeExport.xml'
                               , _xmldir
                               , __name__='_rolemap'
                               )

    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 ]

            if roles or not acquire:
                permissions.append( { 'name'    : name
                                    , 'acquire' : acquire
                                    , 'roles'   : roles
                                    } )

        return permissions

    security.declareProtected( ManagePortal, 'generateXML' )
    def generateXML( self ):

        """ Pseudo API.
        """
        return self._rolemap()

InitializeClass( RolemapExporter )

def exportRolemap(site):

    """ Export roles / permission map as an XML file
    """
    rpe = RolemapExporter( site ).__of__( site )
    return rpe.generateXML(), 'text/xml', 'rolemap.xml'


=== CMF/CMFSetup/__init__.py 1.1 => 1.2 ===
--- CMF/CMFSetup/__init__.py:1.1	Tue May 11 21:35:47 2004
+++ CMF/CMFSetup/__init__.py	Tue May 18 15:54:52 2004
@@ -1,4 +1,4 @@
-""" CMFConfiguration product initialization
+""" CMFSetup product initialization
 
 $Id$
 """




More information about the CMF-checkins mailing list