[CMF-checkins] CVS: CMF/DCWorkflow - DCWorkflow.py:1.30 States.py:1.13 WorkflowUIMixin.py:1.7 utils.py:1.6

Chris McDonough chrism at plope.com
Thu Jan 15 17:27:29 EST 2004


It's a little weird for this stuff to go into the DCWorkflow core given
that the package it depends upon is not open source, isn't it?

On Thu, 2004-01-15 at 15:52, Shane Hathaway wrote:
> Update of /cvs-repository/CMF/DCWorkflow
> In directory cvs.zope.org:/tmp/cvs-serv706
> 
> Modified Files:
> 	DCWorkflow.py States.py WorkflowUIMixin.py utils.py 
> Log Message:
> The workflow can now expand abstract groups into true groups.
> 
> Here is the idea behind this: there are many specific groups, but they
> are all global; there are also many general groups, but they should all
> be local.  DCWorkflow becomes the main component that maps between
> global and local groups.
> 
> Also changed to storing group names instead of monikers, to avoid the
> need to explain what a security moniker is. ;-)
> 
> 
> 
> === CMF/DCWorkflow/DCWorkflow.py 1.29 => 1.30 ===
> --- CMF/DCWorkflow/DCWorkflow.py:1.29	Thu Jan 15 11:15:03 2004
> +++ CMF/DCWorkflow/DCWorkflow.py	Thu Jan 15 15:52:06 2004
> @@ -37,7 +37,7 @@
>  from Products.CMFCore.WorkflowTool import addWorkflowFactory
>  
>  # DCWorkflow
> -from utils import _dtmldir, modifyRolesForPermission, modifyRolesForGroup
> +from utils import _dtmldir, modifyRolesForPermission, modifyExpandedGroups
>  from WorkflowUIMixin import WorkflowUIMixin
>  from Transitions import TRIGGER_AUTOMATIC, TRIGGER_USER_ACTION, \
>       TRIGGER_WORKFLOW_METHOD
> @@ -74,7 +74,7 @@
>      scripts = None
>  
>      permissions = ()
> -    groups = ()     # Security monikers of groups managed by this workflow.
> +    groups = ()     # Names of groups managed by this workflow.
>      roles = None  # The role names managed by this workflow.
>      # If roles is None, listRoles() provides a default.
>  
> @@ -424,7 +424,7 @@
>                  roles = ()
>                  if sdef.group_roles is not None:
>                      roles = sdef.group_roles.get(group, ())
> -                if modifyRolesForGroup(ob, group, roles, managed_roles):
> +                if modifyExpandedGroups(ob, group, roles, managed_roles):
>                      changed = 1
>          return changed
>  
> 
> 
> === CMF/DCWorkflow/States.py 1.12 => 1.13 ===
> --- CMF/DCWorkflow/States.py:1.12	Thu Jan 15 11:15:03 2004
> +++ CMF/DCWorkflow/States.py	Thu Jan 15 15:52:06 2004
> @@ -49,7 +49,7 @@
>      description = ''
>      transitions = ()  # The ids of possible transitions.
>      permission_roles = None  # { permission: [role] or (role,) }
> -    group_roles = None  # { group moniker : (role,) }
> +    group_roles = None  # { group name : (role,) }
>      var_values = None  # PersistentMapping if set.  Overrides transition exprs.
>  
>      security = ClassSecurityInfo()
> 
> 
> === CMF/DCWorkflow/WorkflowUIMixin.py 1.6 => 1.7 ===
> --- CMF/DCWorkflow/WorkflowUIMixin.py:1.6	Thu Jan 15 11:15:03 2004
> +++ CMF/DCWorkflow/WorkflowUIMixin.py	Thu Jan 15 15:52:06 2004
> @@ -105,13 +105,13 @@
>  
>      security.declareProtected(ManagePortal, 'getGroups')
>      def getGroups(self):
> -        """Returns the group security monikers managed by this workflow.
> +        """Returns the names of groups managed by this workflow.
>          """
>          return tuple(self.groups)
>  
>      security.declareProtected(ManagePortal, 'getAvailableGroups')
>      def getAvailableGroups(self):
> -        """Returns a list of available group security monikers.
> +        """Returns a list of available group names.
>          """
>          gf = self._getGroupFolder()
>          if gf is None:
> @@ -119,14 +119,14 @@
>          r = []
>          r.extend(gf.getDynamicGroups())
>          r.extend(gf.getStaticGroups())
> -        return [g.getSecurityMoniker() for g in r]
> +        return [g.getId() for g in r]
>  
>      security.declareProtected(ManagePortal, 'addGroup')
>      def addGroup(self, group, RESPONSE=None):
> -        """Adds a group by moniker.
> +        """Adds a group by name.
>          """
>          gf = self._getGroupFolder()
> -        g = gf.getPrincipalByMoniker(group)
> +        g = gf.getGroupById(group)
>          if g is None:
>              raise ValueError(group)
>          self.groups = self.groups + (group,)
> @@ -137,7 +137,7 @@
>  
>      security.declareProtected(ManagePortal, 'delGroups')
>      def delGroups(self, groups, RESPONSE=None):
> -        """Removes groups by moniker.
> +        """Removes groups by name.
>          """
>          self.groups = tuple([g for g in self.groups if g not in groups])
>          if RESPONSE is not None:
> 
> 
> === CMF/DCWorkflow/utils.py 1.5 => 1.6 ===
> --- CMF/DCWorkflow/utils.py:1.5	Thu Jan 15 11:15:03 2004
> +++ CMF/DCWorkflow/utils.py	Thu Jan 15 15:52:06 2004
> @@ -62,19 +62,21 @@
>  def modifyRolesForGroup(ob, group, grant_roles, managed_roles):
>      """Modifies local roles for one group.
>      """
> +    moniker = "(Group) %s" % group
>      local_roles = getattr(ob, '__ac_local_roles__', None)
>      if local_roles is None:
>          local_roles = {}
> -    roles = local_roles.get(group)
> +    roles = local_roles.get(moniker)
>      if not roles:
>          if not grant_roles:
>              # No roles exist and no grants requested.  Leave unchanged.
>              return 0
>          else:
>              # Add new roles for this group.
> -            local_roles[group] = tuple(grant_roles)
> +            local_roles[moniker] = list(grant_roles)
>              ob.__ac_local_roles__ = local_roles
>              return 1
> +    # Edit the roles.
>      roles = list(roles)
>      changed = 0
>      for role in managed_roles:
> @@ -87,10 +89,27 @@
>              roles.remove(role)
>              changed = 1
>      if changed:
> -        if not roles and local_roles.has_key(group):
> -            del local_roles[group]
> +        if not roles and local_roles.has_key(moniker):
> +            del local_roles[moniker]
>          else:
> -            local_roles[group] = tuple(roles)
> +            local_roles[moniker] = roles
>          ob.__ac_local_roles__ = local_roles
>      return changed
>  
> +def modifyExpandedGroups(ob, group, grant_roles, managed_roles):
> +    """Modifies local roles for a group.
> +
> +    The group may expand into multiple groups as defined by an
> +    aggregated group mapping.
> +    """
> +    groups = [group]
> +    if hasattr(ob, "__group_mapping__"):
> +        map = ob.getAggregatedGroupMapping()
> +        expanded = map.get(group)
> +        if expanded:
> +            groups = expanded
> +    changed = 0
> +    for g in groups:
> +        if modifyRolesForGroup(ob, g, grant_roles, managed_roles):
> +            changed = 1
> +    return changed
> 
> 
> _______________________________________________
> CMF-checkins mailing list
> CMF-checkins at zope.org
> http://mail.zope.org/mailman/listinfo/cmf-checkins




More information about the CMF-checkins mailing list