当在ZCML中注册视图时,如:
<browser:page
for="*"
name="reporter"
class=".reporter.report_form_frame"
permission="cmf.SetOwnPassword"
/>
在遍历堆栈的哪一点Zope机器检查此权限
哪个组件跟踪视图及其权限
browser:page
处理程序设置视图类本身的权限。没有跟踪的中心组件。
在Zope 2中,这被委托给AccessControl.security.protectClass()
函数,这相当于在视图类中添加一个ClassSecurityInfo
对象:
from AccessControl.SecurityInfo import ClassSecurityInfo
class report_form_name(BrowserView):
security = ClassSecurityInfo()
security.declareObjectProtected('cmf.SetOwnPassword')
或者,如果将视图设置为公共(zope.Public
)或私有(zope.Private
),则使用security.declareObjectPublic()
或security.declareObjectPrivate()
调用。
类安全信息被转换为类的__roles__
和__ac_permissions__
属性,发布者在检查权限时检查这些属性。有关这些工作原理的详细信息,请参阅Zope Secrets一书中的安全性章节。