Assign a group to user based on an expression.
Project description
Introduction
The plugin creates a virtual group and helps to assign this group to users by evaluation of a TALES expression.
Installation
Buildout
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
Notes
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 [‘reflab.com’,]
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 riccardo@reflab.com
Report bugs at riccardo@reflab.com
Code repository: http://svn.plone.org/svn/collective/PASPlugins/pas.plugins.groupassigner
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', ()) True
pas.plugins.groupassigner should be in the list of installable plugins:
>>> browser.open("%s/manage_main" % acl_users_url) >>> browser.url 'http://nohost/plone/acl_users/manage_main' >>> form = browser.getForm(index=0) >>> select = form.getControl(name=':action')>>> 'Group Assigner' in select.displayOptions True
and we can select it:
>>> select.getControl('Group Assigner').click() >>> select.displayValue ['Group Assigner'] >>> select.value ['manage_addProduct/pas.plugins.groupassigner/manage_add_groupassigner_form']
we add ‘Group Assigner’ to acl_users:
>>> from pas.plugins.groupassigner.plugin import GroupAssigner >>> assigner = GroupAssigner('group_assigner_test', 'Group Assigner') >>> assigner.group = 'group1' >>> assigner.condition = "python: 'reflab.com' 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='u1@reflab.com') >>> assigner.getGroupsForPrincipal(u1) ('group1',) >>> 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') []
Contributors
Riccardo Lemmi, Reflab Srl
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for pas.plugins.groupassigner-1.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5761644fefead87555d51e1de84ccd6bddd3d3c890a947cd2e5fe14371e3ed75 |
|
MD5 | 9c44a719c6eb8a265645424047d15aad |
|
BLAKE2b-256 | 86265d41ec5188a8a4d4cde83d209fc17c477cdd06ade8df1fe348e1db7f96e8 |