Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Assign a group to user based on an expression.

Project Description


The plugin creates a virtual group and helps to assign this group to users by evaluation of a TALES expression.



See docs/INSTALL.txt

Plone Site

  • Go in the site acl_users then add “Group Assigner”
  • Set the properties: group id, group title and the condition (see below for the meaning of ‘debug’)
  • Activate all the functionalities provided by the plugin


The expression is based only on principal methods and attributes. It is not possible to assign the group on context base.

Variable available are:

principal portal nothing modules

From ‘principal’ you can use the ‘getProperty’ method to use in your expression. For example:

python: principal.getProperty(‘email’).split(‘@’)[-1] in [‘’,]

To assign more than one group you have to add one plugin for each group.

To cache the plugin add a RAMCache manager and assign the plugin to him. If the plugin is cached remember to invalidate the cache when changing properties.

You can activate the ‘debug’ properties to log the evaluation of the expression (in this case don’t use cache).

Other infos

Questions and comments to

Report bugs at

Code repository:

Change history

1.0 (2010-07-02)

  • Released plugin

Detailed Documentation

Tests for pas.plugins.groupassigner

Test setup

>>> from Testing.ZopeTestCase import user_password
>>> from Products.Five.testbrowser import Browser
>>> browser = Browser()

Plugin setup

>>> acl_users_url = "%s/acl_users" % self.portal.absolute_url()
>>> browser.addHeader('Authorization', 'Basic %s:%s' % ('portal_owner', user_password))
>>> self.portal.acl_users.userFolderAddUser('test_user_2_', 'secret', ['Member'], [])
>>> u1 = self.portal.acl_users.getUserById('test_user_1_')
>>> gtool = self.portal.portal_groups
>>> gtool.addGroup('group1', ())

pas.plugins.groupassigner should be in the list of installable plugins:

>>>"%s/manage_main" % acl_users_url)
>>> browser.url
>>> form = browser.getForm(index=0)
>>> select = form.getControl(name=':action')
>>> 'Group Assigner' in select.displayOptions

and we can select it:

>>> select.getControl('Group Assigner').click()
>>> select.displayValue
['Group Assigner']
>>> select.value

we add ‘Group Assigner’ to acl_users:

>>> from pas.plugins.groupassigner.plugin import GroupAssigner
>>> assigner = GroupAssigner('group_assigner_test', 'Group Assigner')
>>> = 'group1'
>>> assigner.condition = "python: '' in principal.getProperty('email')"
>>> self.portal.acl_users['group_assigner_test'] = assigner
>>> assigner = self.portal.acl_users['group_assigner_test']

Now the tests:

>>> assigner.getGroupsForPrincipal(u1)
>>> assigner.getGroupMembers('group1')
>>> u1.setProperties(email='')
>>> assigner.getGroupsForPrincipal(u1)
>>> assigner.getGroupMembers('group1')
>>> assigner.enumerateGroups()
[{'pluginid': 'group_assigner_test', 'title': 'Group Assigner', 'id': 'group1', 'groupid': 'group1'}]
>>> assigner.enumerateGroups(id='group1')
[{'pluginid': 'group_assigner_test', 'title': 'Group Assigner', 'id': 'group1', 'groupid': 'group1'}]
>>> assigner.enumerateGroups(id='groupX')


Riccardo Lemmi, Reflab Srl

Release History

Release History

This version
History Node


Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
pas.plugins.groupassigner-1.0.tar.gz (14.3 kB) Copy SHA256 Checksum SHA256 Source Jul 2, 2010

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting