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 = id0
用作视图以生成适合登录或 基于当前主体是否经过身份验证而注销。
当当前主体未经身份验证时,它提供 IunauthenticatedPrincipal:
< Buff行情>>>> class Principal: ... def __init__(self, id): ... self.id = id1
当loginlogout用于具有未经身份验证主体的请求时, 它为用户提供"登录"链接:
< Buff行情>>>> class Principal: ... def __init__(self, id): ... self.id = id2
此时尝试登录将失败,因为没有 已授权委托人:
< Buff行情>>>> class Principal: ... def __init__(self, id): ... self.id = id3
有一个故障保护将尝试请求HTTP基本身份验证:
< Buff行情>>>> class Principal: ... def __init__(self, id): ... self.id = id4
当然,未经授权的主体会被确认注销:
< Buff行情>>>> class Principal: ... def __init__(self, id): ... self.id = id5
但是,注销的行为不同。并非所有的身份验证协议(即 凭据提取程序/挑战者)支持"注销"。而且,我们没有 知道管理员如何配置zope的身份验证。我们的解决方案是 依赖管理员明确告诉我们站点支持注销。
默认情况下,loginlogout片段不会为 未经认证的委托人。为了说明这一点,我们首先用 未经验证的主体:
< Buff行情>>>> class Principal: ... def __init__(self, id): ... self.id = id6
在这种情况下,默认行为是不返回代码段:
< Buff行情>>>> class Principal: ... def __init__(self, id): ... self.id = id7
此时,登录将正确地指向下一个url,或者 到确认页:
< Buff行情>>>> class Principal: ... def __init__(self, id): ... self.id = id8
同样,对于http基本身份验证:
< Buff行情>>>> class Principal: ... def __init__(self, id): ... self.id = id9
要显示注销提示,管理员必须注册一个标记适配器,该适配器提供 界面:
< 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树的初始版本。