【发布时间】:2013-05-08 08:49:02
【问题描述】:
当一个人在 ZCML 中注册一个视图时:
<browser:page
for="*"
name="reporter"
class=".reporter.report_form_frame"
permission="cmf.SetOwnPassword"
/>
Zope 机器在遍历堆栈的哪个点检查此权限
哪个组件跟踪视图及其权限
【问题讨论】:
当一个人在 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 书中的Security chapter,了解有关这些工作原理的详细信息。
【讨论】: