为Plone提供创建自动组的简单API。
项目描述
概述
本包提供创建Plone中自动组的简单API。自动组是成员自动计算的成员组。《AuthenticatedMembers》组是一个例子,由Plone创建。
创建自动组很简单
创建一个实现IMembershipCriteria的类。此类定义了判断用户是否属于该组的条件。
通过传递IMembershipCriteria的实例和其他有关组的信息调用utils.create_auto_group。
在utils模块中还有其他有用的函数。
示例用法
用例:我们希望创建一个包含所有ID以“r”开头的用户的自动组。
首先,我们创建一个实现IMembershipCriteria的类
>>> from collective.autogroup.interfaces import IMembershipCriteria >>> from zope.interface import implements >>> class MembershipCriteria(object): ... implements(IMembershipCriteria) ... def __call__(self, principal): ... return principal.getId()[0] == 'r'
现在我们使用这个条件创建自动组
>>> from Products.CMFCore.utils import getToolByName >>> from collective.autogroup.utils import create_auto_group >>> group_name = 'r_users' >>> group_title = 'Members of r_users' >>> create_auto_group( ... acl_users=self.portal.acl_users, ... criteria=MembershipCriteria(), ... group_name=group_name, ... title=group_title, ... ) >>> gtool = getToolByName(self.portal, 'portal_groups') >>> group = gtool.getGroupById(group_name) >>> group is not None True
目前,该组应该是空的,因为我们没有符合条件的用户
>>> len(group.getAllGroupMemberIds()) 0
创建一些用户并看看会发生什么
>>> user1 = self.add_user('ronaldo') >>> user2 = self.add_user('romario') >>> user3 = self.add_user('tostao') >>> sorted(group.getGroupMemberIds()) ['romario', 'ronaldo'] >>> group_name in user1.getGroups() True >>> group_name in user2.getGroups() True >>> group_name in user3.getGroups() False
关于组标题
看看这个
>>> not group.getProperty('title') True
看起来组标题是空的,尽管我们在调用 create_auto_group 时将其设置为 group_title。结果是 prefs_groups_overview 和其他 Plone 模板都没有调用 group.getProperty 来获取组标题。即使是 Plone 创建的 AuthenticatedUsers 组(也没有设置标题属性)。
>>> not gtool.getGroupById('AuthenticatedUsers').getProperty('title') True
prefs_groups_overview 模板使用以下方法来获取组标题
>>> search_results = self.portal.acl_users.searchGroups(id=group_name) >>> search_results[0]['title'] == group_title True
要更改自动组的标题,我们不应该调用 group.setProperty,这样是不会起作用的。正确的方法是更改相应 PAS 插件的 description 属性(是的,就是 description 属性,不是 title)。幸运的是,这个包提供了一个使这项工作更简单的函数。
>>> from collective.autogroup.utils import (set_auto_group_title, ... get_auto_group_title) >>> new_title = group_title + '_new' >>> set_auto_group_title(self.acl_users, group_name, new_title) >>> search_results = self.portal.acl_users.searchGroups(id=group_name) >>> search_results[0]['title'] == new_title True >>> get_auto_group_title(self.acl_users, group_name) == new_title True
也可以通过 ZMI 来完成。
致谢
Rafael Oliveira <rafaelbco@gmail.com>:作者。
变更日志
0.1b1 - 15feb2010
首次发布。
项目详情
collective.autogroup-0.1b1.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1f41a5351448206b469b2cb02aafa586ac44f946744098c279ee484b0dbf604d |
|
MD5 | 4f84b922af229d1e9a7e34392c766340 |
|
BLAKE2b-256 | 73ace4d24003ccce94d00685ff2a5dc1c841b334c2105cd8f440328e76b54723 |