跳转到主要内容

用户和群组管理

项目描述

Latest PyPI version Number of PyPI downloads https://travis-ci.org/bluedynamics/cone.ugm.svg?branch=master https://coveralls.io/repos/github/bluedynamics/cone.ugm/badge.svg?branch=master

为cone.app提供用户和群组管理UI的插件。

功能

  • 用户和群组CRUD

  • 用户和群组的主成员资格

  • 支持角色

  • 本地管理器支持

  • 用户和群组表单配置

设置

先决条件

在安装过程中,lxml被编译,必须在系统上安装所需的开发头文件。

基于debian的系统安装

$ apt-get install -y libxml2-dev libxslt1-dev

开发和测试

对于测试和开发,cone.ugm包含一个buildout配置。下载或检出包并运行

cone.ugm$ ./bootstrap.sh python3

示例配置

为了测试和演示目的,在源代码包的cfg文件夹中包含一个示例UGM配置。

它包含配置文件ugm.xml,包含一般的UGM配置和localmanager.xml,包含关于本地用户和群组管理的配置。这两个文件可以通过设置UI进行编辑。

ugm.ini文件包含应用程序配置

[app:ugm]
...

cone.plugins =
    cone.ugm

ugm.backend = file
ugm.config = %(here)s/ugm.xml
ugm.localmanager_config = %(here)s/localmanager.xml

ugm.users_file = %(here)s/../parts/ugm/users
ugm.groups_file = %(here)s/../parts/ugm/groups
ugm.roles_file = %(here)s/../parts/ugm/roles
ugm.datadir = %(here)s/../parts/ugm/data

...

在本例中,将文件后端配置为UGM后端。有关配置基于SQL或LDAP的后端,请参阅相应的cone.sql和cone.ldap文档。

启动应用程序

cone.ugm$ ./bin/pserver cfg/ugm.ini

并浏览https://127.0.0.1:8081/。默认管理员用户密码为admin

配置和自定义

通用

为了自定义插件,创建一个集成包并将其包含在您的设置中。

角色

cone.ugm内部使用3个角色以允许用户操作。

editor允许管理成员资格,admin除此之外还允许添加、编辑和删除用户和组,而manager是超级用户。如果UGM是唯一使用的插件,您可以减少可用角色为这三个

cone.app.security.DEFAULT_ROLES = [
    ('editor', 'Editor'),
    ('admin', 'Admin'),
    ('manager', 'Manager')
]

主体表单

基本主体表单的自定义发生在ugm XML配置文件中。每个要渲染的字段必须在users_form_attrmap和相应的groups_form_attrmap中有一个条目

<users_form_attrmap>
  <elem>
    <key>my_field</key>
    <value>My Field</value>
  </elem>
</users_form_attrmap>

默认情况下,对于XML配置中的每个自定义条目,都会渲染一个非必填的文本字段。

要使自定义字段成为必填项,最简单的方法是使用default_form_field_factory并将其注册为user_field和相应的group_field

from cone.ugm.browser.principal import default_form_field_factory
from cone.ugm.browser.principal import user_field
from functools import partial

my_field_factory = user_field('my_field')(
    partial(default_form_field_factory, required=True)
)

可以注册用于特定UGM后端的自定义主体字段工厂。此示例取自cone.ldap,并在LDAP后端中注册了一个用户字段工厂以用于cn属性

ldap_cn_field_factory = user_field('cn', backend='ldap')(
    partial(default_form_field_factory, required=True)
)

主体表单字段自定义最灵活的方法是提供一个回调函数并直接调用yafowil工厂

from yafowil.base import factory

@user_field('age')
def age_field_factory(form, label, value):
    return factory(
        'field:label:error:number',
        value=value,
        props={
            'label': label,
            'datatype': int
        })

注意。自定义字段的值将写入主体属性,这些属性是从小部件提取的。请确保在小部件属性中定义期望的数据类型或定义一个合适的自定义提取器。

主体列表

XXX

对象事件

您可以通过绑定到给定的事件类来对用户和组的创建、修改和删除做出反应。

这些事件在UGM管理表单中进行用户操作时触发。

必要的导入

from zope.event import classhandler
from cone.ugm import events

定义事件处理程序

针对用户

@classhandler.handler(events.UserCreatedEvent)
def on_user_created(event):
    print(f"user {event.principal} with id {event.principal.name} created")

@classhandler.handler(events.UserModifiedEvent)
def on_user_modified(event):
    print(f"user {event.principal} with id {event.principal.name} modified")

@classhandler.handler(events.UserDeletedEvent)
def on_user_deleted(event):
    print(f"user {event.principal} with id {event.principal.name} deleted")

和针对组

@classhandler.handler(events.GroupCreatedEvent)
def on_group_created(event):
    print(f"group {event.principal} with id {event.principal.name} created")

@classhandler.handler(events.GroupModifiedEvent)
def on_group_modified(event):
    print(f"group {event.principal} with id {event.principal.name} modified")

@classhandler.handler(events.GroupDeletedEvent)
def on_group_deleted(event):
    print(f"group {event.principal} with id {event.principal.name} deleted")

贡献者

  • Robert Niederreiter(作者)

  • Florian Friesdorf

  • Jens Klein

更改

1.0a7(2023-02-02)

  • 在model.user.User.expires中捕获AttributeError。发生在用户添加表单中,此时用户尚不存在。[rnix]

1.0a6(2022-12-05)

  • 从cone.ugm.browser.expires中移除已弃用的expiration yafowil蓝图。账户过期现在使用常规日期字段完成,因为UGM后端允许将expires属性设置为datetime对象,自node.ext.ugm 1.1起。[rnix]

  • users_expires_attrusers_expires_unit设置移动到cone.ldap,因为它们始终只用于LDAP UGM后端。[rnix]

  • 在cone.ugm.model.User中公开后端用户的expires属性。[rnix]

  • 根据yafowil 3.0中的更改修复通用设置表单。[rnix]

1.0a5(2022-10-06)

  • MappingNode替换已弃用的Nodify的使用。[rnix]

1.0a4(2021-11-08)

  • 采用safe_decodenode_path的导入路径。[rnix]

1.0a3(2021-10-25)

  • 修复 UsersListingGroupsListing 搜索过滤器以忽略 None 值。

  • 增加列表切片大小为 15。[rnix]

  • 添加 change_password 表单。[rnix]

  • 添加对用户和组添加/修改/删除上对象事件的支撑。[zworkb]

1.0a2 (2020-11-12)

  • 修复删除主体。[rnix]

1.0a1 (2020-07-09)

  • 对于用户和组表单,使用 ContentAddFormContentEditForm 行为代替 B/C AddBehaviorEditBehavior。[rnix]

  • 使用在 cone.app 1.0rc1 中引入的 layout_config 装饰器。[rnix]

  • 移除 cone.ugm.model.users.users_factorycone.ugm.model.groups.groups_factory。直接将相关节点类注册为应用程序条目。[rnix]

  • 将 UGM 列表内容视图绑定到 UGM 模型。[rnix]

  • 将与 LDAP 相关的代码移到 cone.ldap。[rnix]

  • 用户自增起始设置值在配置中可能为空。[rnix]

  • 不要在易失性存储中记住用户和组。[rnix]

  • 使用 IUgm.invalidate 对 UGM 后端上的用户和组进行失效。[rnix]

  • cone.ugm.browser.listing.ColumnListing.query_items 重命名为 listing_items。[rnix]

  • cone.ugm.browser.group.Userscone.ugm.browser.user.Groups 属性描述符转换为 ColumnListing 派生图块。[rnix]

  • 移除多余的 jQuery.sortElements.jsnaturalSort.js。[rnix]

  • 将插件配置代码移入主钩子函数内。[rnix]

  • 支持 Python 3。[rnix]

  • 将 doctests 转换为 unittests。[rnix]

  • 使用 cone.app.ugm.ugm_backend 而不是 cone.app.cfg.auth。[rnix]

  • 使用 cone.tile.tile 装饰器而不是 cone.tile.registerTile。[rnix]

  • 使用 request.has_permission 而不是 pyramid.security.has_permission。[rnix]

  • 移除输入输出小部件。列表小部件现在是唯一的主体成员。从设置中移除相应的 default_membership_assignment_widgetuser_display_name_attributegroup_display_name_attribute。[rnix]

  • 更改 UI。主体表单和主体成员资格不再一起显示在右侧列中。当查看主体的内容时,左侧列显示列表,右侧列显示主体表单。当查看主体时,左侧列显示主体表单,右侧列显示主体成员资格。[rnix]

  • 更新到 cone.app >= 1.0。[rnix]

  • 将许可协议更改为 LGPLv3。[rnix]

0.9.7

  • setup.py 中直接依赖 lxml。[rnix, 2014-05-13]

0.9.6

  • 采用依赖项。[rnix, 2013-01-10]

0.9.5

  • 修复肖像 CSS。[rnix, 2012-10-30]

  • 支持 Python 2.7。[rnix, 2012-10-16]

  • 采用 cone.app 0.9.4。[rnix, 2012-07-29]

  • 采用 node 0.9.8。[rnix, 2012-07-29]

  • 采用 plumber 1.2。[rnix, 2012-07-29]

  • 简化 cone.ugm.browser.actions。[rnix, 2012-07-26]

  • 添加本地管理功能。[rnix, 2012-07-25]

0.9.4

  • 从 cone.app 中移除 BBB 类的使用。[rnix, 2012-05-18]

  • 修复设置表单保存后的失效。[rnix, 2012-04-23]

  • 支持肖像图像。[rnix, 2012-04-21]

  • 为公开给属性映射的属性配置。[rnix, 2012-04-19]

  • 在创建主体或角色容器后进行失效。[rnix, 2012-04-19]

  • 采用expires蓝图,将其应用于yafowil.widget.datetime 1.3。[rnix,2012-04-19]

0.9.3

  • 为用户ID添加自动增长功能。[rnix,2012-03-30]

0.9.2

  • 改进账户过期小部件。[rnix,2012-03-20]

0.9.1

  • 添加账户过期功能。[rnix,2011-03-06]

  • 使出入小部件的显示字段可配置。[rnix,2011-01-31]

  • 动态宽度CSS。[rnix,2011-12-18]

  • 移除全局cone.ugm.backend。由cone.ugm.model.utils.ugm_backend返回cone.app.cfg.auth。[rnix,2011-11-22]

  • 为设置表单指定显式名称。[rnix,2011-11-18]

  • 添加节点属性以使用户和组在显示时在navtree中显示。[rnix,2011-11-16]

0.9

  • 初始发布。

许可证

GNU较小型通用公共许可证

版本 3,2007年6月29日

版权所有 © 2007 自由软件基金会,Inc. <https://fsf.org/>

每个人都可以复制和分发本许可证文档的准确副本,但不得更改。

本版本的GNU较小型通用公共许可证包含GNU通用公共许可证第3版的内容和条件,并补充了以下附加许可。

  1. 附加定义。

在此处,“本许可证”是指GNU较小型通用公共许可证的版本3,“GNU GPL”是指GNU通用公共许可证的版本3。

“库”是指由本许可证管辖的受保护作品,但不包括以下定义的应用程序或组合作品。

“应用程序”是指任何使用库提供的接口但不是基于库的工作。定义由库定义的类的子类被视为使用库提供的接口的方式。

“组合作品”是指通过组合或链接应用程序与库而制作的作品。与组合作品一起制作的特定版本的库也称为“链接版本”。

组合作品的“最小对应源代码”是指组合作品的对应源代码,但不包括组合作品的部分源代码,如果单独考虑,这些部分基于应用程序而不是链接版本。

组合作品的“对应应用程序代码”是指应用程序的对象代码和/或源代码,包括复制组合作品所需的所有数据和实用程序程序,但不包括组合作品的系统库。

  1. 对GNU GPL第3条的例外。

您可以在本许可证的第3条和第4条下传输受保护的作品,而不受GNU GPL第3条的约束。

  1. 传输修改版本。

如果您修改了库的副本,并且,在您的修改中,一个功能引用了由使用该功能的程序提供的函数或数据(除在调用该功能时作为参数传递的外),那么您可以在此许可证下传输修改版本的副本

  1. ,前提是您尽善意努力确保,如果应用程序不提供该函数或数据,该功能仍然运行,并执行其剩余有意义的目的部分,或者

  2. 在GNU GPL下,不适用于该副本的任何本许可证的附加许可。

  1. 包含库头文件材料的对象代码。

应用程序的对象代码形式可以包含库的一部分头文件。您可以在您选择的条款下传输此类对象代码,但前提是,如果包含的材料不是限于数字参数、数据结构布局和访问器、或小型宏、内联函数和模板(长度不超过十行),您必须执行以下两项

  1. 在每个目标代码副本中显著声明库的使用情况,以及库及其使用受本许可证的保护。

  2. 随目标代码附上GNU GPL和本许可证文件的副本。

  1. 组合作品。

您可以在您选择的条款下传达组合作品,这些条款综合考虑起来,实际上并不限制修改组合作品中所包含的库的部分,也不限制调试此类修改的反汇编,如果您还执行以下各项

  1. 在每个组合作品副本中显著声明库的使用情况,以及库及其使用受本许可证的保护。

  2. 随组合作品附上GNU GPL和本许可证文件的副本。

  3. 对于在执行过程中显示版权声明的组合作品,将这些版权声明中包括库的版权声明,以及一个引用用户到GNU GPL和本许可证文件副本的参考。

  4. 执行以下一项

    1. 根据本许可证的条款传达最小对应源代码,以及相应的应用代码以适合的形式,并在允许用户重新组合或重新链接应用程序与链接版本的修改版本的条款下,产生一个修改后的组合作品,其方式由GNU GPL的第6章规定传达对应源代码。

    2. 使用合适的共享库机制与库进行链接。一个合适的机制是:(a)在运行时使用用户计算机系统上已存在的库的副本,并且(b)将正确地与与链接版本接口兼容的库的修改版本一起工作。

  5. 提供安装信息,但仅当您根据GNU GPL的第6章要求提供此类信息时,并且仅限于此类信息对于安装和执行通过重新组合或重新链接应用程序与链接版本的修改版本产生的修改后的组合作品是必要的。 (如果您使用选项4d0,安装信息必须随最小对应源代码和对应应用代码一起提供。如果您使用选项4d1,您必须以GNU GPL第6章规定传达对应源代码的方式提供安装信息。)

  1. 组合库。

您可以将基于库的库设施与不是应用程序且不受本许可证保护的库设施一起放在一个库中,并在您选择的条款下传达此类组合库,如果同时满足以下两个条件

  1. 随组合库附上基于库的相同工作副本,不与任何其他库设施组合,并在本许可证的条款下传达。

  2. 在组合库中显著声明其部分是基于库的工作,并说明如何找到相同工作的伴随的非组合形式。

  1. GNU较小型通用公共许可证的修订版。

自由软件基金会可能会不时发布GNU较小型通用公共许可证的修订版和新版本。这些新版本的精神将与当前版本相似,但可能因解决新的问题或关注点而有所不同。

每个版本都有一个区分的版本号。如果您收到的库指定了GNU较小型通用公共许可证的某个编号版本“或任何后续版本”适用于它,您可以选择遵循已发布的版本或自由软件基金会发布的任何后续版本的条款和条件。如果您收到的库没有指定GNU较小型通用公共许可证的版本号,您可以选择自由软件基金会已发布的GNU较小型通用公共许可证的任何版本。

如果您收到的库指定代理可以决定GNU Lesser General Public License的未来版本是否适用,那么该代理对任何版本的公开声明接受将永久授权您为库选择该版本。

项目详情


下载文件

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

源代码分发

cone.ugm-1.0a7.tar.gz (77.8 kB 查看散列)

上传时间 源代码

构建分发

cone.ugm-1.0a7-py3-none-any.whl (100.5 kB 查看散列)

上传时间 Python 3

支持者: