zope3安全组件的zmi视图

zope.app.securit的Python项目详细描述


详细文档

验证实用程序的查询视图

常规身份验证服务不会提供 接口,但它本身是可查询的,因为它提供了 获取主体(名称) 方法:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
>>> class MyAuthUtility:
...     data = {'jim': Principal(42), 'don': Principal(0),
...             'stephan': Principal(1)}
...
...     def getPrincipals(self, name):
...         return [principal
...                 for id, principal in self.data.items()
...                 if name in id]

现在我们有了可查询的文件,我们为它创建视图:

< Buff行情>
>>> from zope.app.security.browser.auth import AuthUtilitySearchView
>>> from zope.publisher.browser import TestRequest
>>> request = TestRequest()
>>> view = AuthUtilitySearchView(MyAuthUtility(), request)

这允许我们呈现搜索表单。

< Buff行情>
>>> print(view.render('test')) # doctest: +NORMALIZE_WHITESPACE
<h4>principals.zcml</h4>
<div class="row">
<div class="label">
Search String
</div>
<div class="field">
<input type="text" name="test.searchstring" />
</div>
</div>
<div class="row">
<div class="field">
<input type="submit" name="test.search" value="Search" />
</div>
</div>

如果我们要求结果:

< Buff行情>
>>> view.results('test')

我们没有,因为我们没有提供。但如果我们输入:

< Buff行情>
>>> request.form['test.searchstring'] = 'n'

我们仍然没有任何消息:

< Buff行情>
>>> view.results('test')

因为我们没有按按钮。所以让我们按下按钮:

< Buff行情>
>>> request.form['test.search'] = 'Search'

这样我们就可以得到结果了(!)

< Buff行情>
>>> ids = list(view.results('test'))
>>> ids.sort()
>>> ids
[0, 1]

登录/注销片段

课程登录信息:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
0

用作视图以生成适合登录或 基于当前主体是否经过身份验证而注销。

当当前主体未经身份验证时,它提供 IunauthenticatedPrincipal:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
1

当loginlogout用于具有未经身份验证主体的请求时, 它为用户提供"登录"链接:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
2

此时尝试登录将失败,因为没有 已授权委托人:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
3

有一个故障保护将尝试请求HTTP基本身份验证:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
4

当然,未经授权的主体会被确认注销:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
5

但是,注销的行为不同。并非所有的身份验证协议(即 凭据提取程序/挑战者)支持"注销"。而且,我们没有 知道管理员如何配置zope的身份验证。我们的解决方案是 依赖管理员明确告诉我们站点支持注销。

默认情况下,loginlogout片段不会为 未经认证的委托人。为了说明这一点,我们首先用 未经验证的主体:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
6

在这种情况下,默认行为是不返回代码段:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
7

此时,登录将正确地指向下一个url,或者 到确认页:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
8

同样,对于http基本身份验证:

< Buff行情>
>>> class Principal:
...     def __init__(self, id):
...         self.id = id
9

要显示注销提示,管理员必须注册一个标记适配器,该适配器提供 界面:

< Buff行情>
>>> class MyAuthUtility:
...     data = {'jim': Principal(42), 'don': Principal(0),
...             'stephan': Principal(1)}
...
...     def getPrincipals(self, name):
...         return [principal
...                 for id, principal in self.data.items()
...                 if name in id]
0

此标志指向该站点支持注销的loginlogout。有个"禁止操作" 适配器可以是R为此注册:

< Buff行情>
>>> class MyAuthUtility:
...     data = {'jim': Principal(42), 'don': Principal(0),
...             'stephan': Principal(1)}
...
...     def getPrincipals(self, name):
...         return [principal
...                 for id, principal in self.data.items()
...                 if name in id]
1

现在,当我们将loginlogout与未经验证的主体一起使用时,会得到一个注销 提示:

< Buff行情>
>>> class MyAuthUtility:
...     data = {'jim': Principal(42), 'don': Principal(0),
...             'stephan': Principal(1)}
...
...     def getPrincipals(self, name):
...         return [principal
...                 for id, principal in self.data.items()
...                 if name in id]
2

我们可以注销此主体,传递一个URL以重定向到:

< Buff行情>
>>> class MyAuthUtility:
...     data = {'jim': Principal(42), 'don': Principal(0),
...             'stephan': Principal(1)}
...
...     def getPrincipals(self, name):
...         return [principal
...                 for id, principal in self.data.items()
...                 if name in id]
3

更改

5.0.0(2019-07-12)

  • 添加对Python3.7的支持。

  • 放弃对python 3.4的支持。

  • 删除不推荐使用的格式化程序的安全声明 来自globalmodules.zcml的模块。

    请注意,应避免使用globalmodules.zcml。最好是 仅声明您实际需要使用的内容。

4.0.0(2017-04-27)

  • 取消了"zope.testing.doctestunit"的使用,转而使用stdlib的doctest。
  • 取消了对zope.app.testing的使用,转而使用了zope.app.wsgi
  • 添加对pypy、python 3.4、3.5和3.6的支持。

3.7.5(2010-01-08)

  • 将"zope.manageapplication"权限移到zope.app.applicationcontrol
  • 使用需要zope.login的较新zope.publisher修复测试。

3.7.3(2009-11-29)

  • 提供一个干净的zope设置并将zope.app.testing移到测试依赖项中
  • 从install中删除未使用的依赖项,如zodb3等,需要

3.7.2(2009-09-10)

  • 为persistentlist的'\u protections.zcml'添加了数据属性 和persistentdict来适应userlist和userdict行为 当它们被代理时。

3.7.1(2009-08-15)

  • 已更改globalmodules.zcml以避免为 已弃用的标准模块,以避免弃用警告。

    请注意,应避免使用globalmodules.zcml。最好是 仅声明您实际需要使用的内容。

3.7.0(2009-03-14)

  • 所有接口,以及一些与身份验证相关的帮助程序类和 已移动函数(checkPrincipal、PrincipalSource、PrincipalAlterms等) 进入新的zope.authentication包。向后兼容性导入 提供。
  • "全局主体注册表"及其zcml指令被移动到 新的"zope.principalregistry"包。向后兼容性导入是 提供。
  • iprincipal->;zope.publisher.interfaces.loggingininfo.iloggininfo 适配器已移动到zope.publisher。向后兼容性导入 提供。
  • 许可证可撤销和许可证词汇表已移动 发送到 zope.security 包。向后兼容性导入是 提供。
  • "zope.public"许可的注册以及其他 公共权限,如"zope.view"已移动到 zope.security 。 它的configure.zcml现在包含在这个包中。
  • "protect"功能现在是一个no op,不再需要了,因为 zope.security现在知道了i18n消息和__ 属性,默认情况下不会保护它们。
  • AddCheckerPublic已从zope.app.security.tests移动到 佐佩。安全。测试。提供向后兼容性导入。
  • 现在将 localpermission 类移到new zope.app.localpermission 包裹。这个包现在只有向后兼容导入和 ZCML包括。
  • 重构后清理依赖项。另外,不要依赖 zope.app.继续测试。
  • 更新包的描述,指出重构已完成。

3.6.2(2009-03-10)

  • 首选的权限设置是 长期从zope.securitypolicy.interfaces导入 现在他们很复杂了etely从 zope.app.security.settings移到那里 以及 权限设置类。唯一剩下的 向后兼容性是在以下情况下导入allow/unset/deny常量 安装zope.securitypolicy 以允许取消安全性检查 设置。

3.6.1(2009-03-09)

  • 依赖于新的zope.password包而不是zope.app.authentication包 要获取身份验证实用程序的密码管理器,请删除 依赖于zope.app.authentication
  • 使用AuthUtilitySearchView模板而不是难看的HTML 在python代码中构造。
  • bug:python 2.6中已经弃用了 sha md5 模块。 在使用Python2.6时,只要包含此包的zcml, 已经发出了一个反对的警告,指出 md5 sha 已经 已弃用。提供了一个简单的条件来检查Python2.6 或更高版本通过检查是否存在 json 模块来安装 thas只在python 2.6中添加,因此可以选择加载安全性 关于 md5 sha 的声明
  • 删除不推荐使用的代码,从而删除对 zope.deprecation和zope.deferredimport。
  • 清除代码一点,用 adapts替换旧的用于语句的 电话:

3.6.0(2009-01-31)

  • 在zope.org将邮件列表地址更改为zope dev,因为 Zope3 Dev现在退休了。在中将"芝士店"改为"派皮" 包裹主页。
  • 将protectClass模块移动到zope.security,只留下一个 从新位置导入的兼容性模块。
  • 将<;module>;指令实现移动到zope.security
  • 使用zope.container而不是zope.app.container。

3.5.3(2008-12-11)

  • 使用zope.browser.interfaces.iterms而不是 zope.app.form.browser.interfaces

3.5.2(2008-07-31)

  • 错误:原来检查regex并没有比 想法,因为它会在Python2.4中引起弃用警告。因此,让我们 查找在Python2.5中添加的库。

3.5.1(2008-06-24)

  • 错误:Python2.5中已弃用了"gopherlib"模块。每当 使用Python2.5时包含了这个包的zcml,这是一种不赞成 有人发出警告说 不赞成的提供了一个简单的条件来检查Python2.5或更高版本 通过检查已删除的 regex 模块进行安装,因此可以选择 加载gopherlib的安全声明

3.5.0(2008-02-05)

  • 特点: zope.app.security.PrincipalRegistry.PrincipalRegistry.getPrincipal 返回 zope.security.management.system_user 当其ID用于搜索时 钥匙.

3.4.0(2007-10-27)

  • 独立于主zope树的初始版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么使用迭代器。ebean(ORM)模型对象哈希集上的remove()不起作用?   Java日间客户端   需要以java印地语输出编译代码   java如何在Junit4中测试调用私有方法的方法   java CookSwing从文本字段检索字符串   java获取事务中的所有插入ID   stream Java可选如何将一种类型的列表转换为另一种类型   是否需要java Hadoop MapReduce RecordReader实现?   java如何在我的Web应用程序中使用带有路径的xsd模式   java将RTP vp8流保存到webm文件   java Android Studio:无法解析符号“raw”   java如果不使用生成器、静态构造函数或引发异常,如何创建一个包含两个整数的构造函数,而这两个整数永远不相等?   用于Spring安全用户身份验证的java主密码   java REST api返回json但配置为XML?