我正在使用自定义遍历制作视图。我想基于当前登录的用户动态遍历到下一个对象。但我知道的所有方法(portal_membership.getAuthenticatedUser,portal_state.member等..)始终在View对象的__init__
和publicTraversal
上返回匿名。他们返回的唯一情况是对象的__call__
。
如何使getAuthenticatedUser适用于我的案例(在视图的__init__
或publicTraversal
电话上)?
答案 0 :(得分:2)
你做不到。由于Zope的安全模型,用户在遍历后确定,因为此信息取决于已发布对象的上下文。
您只能在发布对象时依赖getAuthenticatedUser
;在遍历,身份验证和授权之后,然后发布,在视图中意味着调用__call__
方法。
由于publicTraversal
作为遍历阶段的一部分被调用,因此您无法知道该方法中经过身份验证的用户。您必须重新考虑您的观点,以便不依赖于在该阶段中已知的经过身份验证的用户。
答案 1 :(得分:0)
您不应在浏览器的__init__
中执行任何操作:主要是因为您无法确定是否已设置所有环境。特别是在您的情况下,您可以使用__call__
方法中的相同方法而不是__init__