跳转到主要内容

为Plone提供创建自动组的简单API。

项目描述

概述

本包提供创建Plone中自动组的简单API。自动组是成员自动计算的成员组。《AuthenticatedMembers》组是一个例子,由Plone创建。

创建自动组很简单

  1. 创建一个实现IMembershipCriteria的类。此类定义了判断用户是否属于该组的条件。

  2. 通过传递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 来完成。

致谢

变更日志

0.1b1 - 15feb2010

  • 首次发布。

项目详情


下载文件

根据您的平台下载文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

collective.autogroup-0.1b1.zip (12.4 kB 查看哈希值)

上传时间

支持者