跳转到主要内容

Zope安全组件的类似Grok的配置

项目描述

此软件包提供了在无需ZCML的情况下定义Zope权限和安全检查器的基本元素。

设置 grokcore.security

此软件包的设置基本上类似于grokcore.component软件包,请参阅其文档以获取详细信息。您需要的附加ZCML行如下:

<include package="grokcore.security" file="meta.zcml" />
<include package="grokcore.security" />

请将此内容放在根ZCML文件顶部附近,但在包含grokcore.component配置的行下方。

定义权限

grokcore.component中,通过从某些基类继承来定义(并自动注册)各种组件。同样,使用grokcore.security定义权限也是如此

import grokcore.security

class EditContent(grokcore.security.Permission):
    grokcore.security.name('mypkg.EditContent')

这定义了一个ID为mypkg.EditContent的权限。您必须始终显式指定此ID。此外,您还可以为权限提供一个人类可读的标题和描述。当您的应用程序在某个地方提供权限列表时,这很有用,您不想让用户费心解读点状ID。

import grokcore.security

class EditContent(grokcore.security.Permission):
    grokcore.security.name('mypkg.EditContent')
    grokcore.security.title('Edit content')
    grokcore.security.description('Anyone who has this permission may '
                                  'modify content in the application.')

定义组件的检查器

grokcore.security提供了一些定义组件检查器的手段

  • grokcore.security.require(permission),它可以用作类级别指令来为整个组件设置权限,或者用作装饰器来为函数或方法设置权限。

  • 来自grokcore.security.utilprotect_getattrprotect_setattr,它们接受一个类、一个属性名和一个权限作为参数,并定义Zope安全检查器以在指定类的实例上获取或设置特定属性。

有了这些,您可以构建需要安全声明的组件的grokkers。例如,grokcore.view软件包使用它们来定义一个grokker,该grokker为视图定义安全声明。

class ViewSecurityGrokker(martian.ClassGrokker):
    martian.component(grokcore.view.View)
    martian.directive(grokcore.security.require, name='permission')

    def execute(self, factory, config, permission, **kw):
        for method_name in zope.publisher.interfaces.browser.IBrowserPage:
            config.action(
                discriminator=('protectName', factory, method_name),
                callable=grokcore.security.util.protect_getattr,
                args=(factory, method_name, permission),
                )
        return True

有了这样的grokker,可以保护视图如下

class Edit(grokcore.view.View):
    grokcore.security.require(EditContent)

注意我们如何简单地传递一个权限类到require指令。或者,您也可以传递权限ID

class Edit(grokcore.view.View):
    grokcore.security.require('mypkg.EditContent')

如果您想能够为单个类方法而不是整个类定义权限,您只需将您的grokker基于martian.MethodGrokker而不是ClassGrokker。定义检查器的实际机制是相同的。

请注意,grokcore.security尚未提供允许您指定简单属性访问权限(读取和写入)的指令。

API概述

权限

定义权限的基类。使用name指令定义必需的权限ID。可选地使用titledescription指令提供权限的人类可读信息。

公共

特殊权限,可以在组件不应由权限保护的任何时候引用(公开访问)。

require(permission_class_or_id)

声明,使用特定组件(当作为类级别指令使用时)或方法(当作为方法装饰器使用时)需要一定的权限。参数可以是权限类(Permission 的子类)或权限 ID。

此外,grokcore.security 包暴露了 grokcore.component API。

更改

4.0 (2023-07-11)

  • 支持 Python 3.7、3.8、3.9、3.10、3.11。

  • 弃用对 Python 2.7、3.4、3.5、3.6 的支持。

3.0.1 (2018-01-12)

  • 重新排列测试,以便 Travis CI 可以抓取所有功能测试。

3.0.0 (2018-01-05)

  • 修复了几个暴露的错误。

1.7 (2018-01-03)

  • Python 3 兼容性。

1.6.3 (2016-01-29)

  • 更新测试。

1.6.2 (2012-05-07)

  • 正确声明 zope.dottedname 为依赖项。

1.6.1 (2012-05-02)

  • 修复了包,使其在未指定额外 role 时也能正常工作。

1.6 (2012-05-01)

  • 权限和角色组件已从 grok 包移动到属于它的 grokcore.security 包。

  • permissions() 指令已从 grok 包移动到属于它的 grokcore.security。

1.5 (2010-11-01)

  • 提高了对 Martian 和 grokcore.component 的要求。

  • 使包符合 zope.org 存储库策略。

1.4 (2009-12-13)

  • 注意 回滚了 grokcore.component-2.0 和 martian-0.12 的版本要求。这些要求阻碍了进一步的发展,特别是基于 ZTK 的 grok-1.1。1.3 版本可能应该被称为 2.0,就像 grokcore.component 一样。

  • 从主分支移植 setup.py 依赖修复。

  • 使用 zope.security 而不是 zope.app.security。

1.3 (2009-09-16)

  • 使用 grok.zope.org/releaseinfo 信息而不是我们自己的 versions.cfg 复制,以便更容易维护。

  • 依赖于 grokcore.component 2.0 和 0.12 Martian - 这改变了继承问题,但似乎不影响 grokcore.security 本身。

1.2 (2009-09-14)

  • 将默认权限从 grok.View 更改为 zope.View。似乎没有特别的原因不使用在 zope.app.security 中定义的标准 zope.View 权限。

    注意:您仍然必须在您的 site.zcml 文件中分配此权限。否则,您无法访问任何视图。

  • 请确保包括 zope.app.security 的配置,因为该包定义了 zope.View 权限。请注意,在未来,这将更改为 zope.security。

  • 将 versions.cfg 与 grok 1.0 发布候选版本的 versions.cfg 保持一致。

1.1 (2009-07-03)

  • 将默认权限从 zope.Public 更改为 grok.View。

    注意:您必须在您的 site.zcml 文件中分配此权限。否则,您无法访问任何视图。

1.0 (2008-08-03)

  • 于 2008 年 7 月创建了 grokcore.security,通过将 Grok 中的安全相关组件、grokkers 和指令进行分解。

项目详情


下载文件

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

源代码分发

grokcore.security-4.0.tar.gz (19.2 kB 查看散列)

上传时间 源代码

构建分发

grokcore.security-4.0-py3-none-any.whl (26.2 kB 查看哈希值)

上传时间 Python 3

支持者