【问题标题】:mixing url dispatch and traversal混合 url 调度和遍历
【发布时间】:2011-11-02 03:37:57
【问题描述】:

我一直在开发一个使用 url dispatch 的应用程序。我根据在这里找到的一些重要信息设置了我的根工厂:https://github.com/mmerickel/pyramid_auth_demo(感谢迈克尔!)

现在我也在尝试使用 pyramid_formalchemy。似乎 pyramid_formalchemy 使用遍历来确定授权。没关系,但我被困在一点上......

对于遍历对象需要位置感知,这意味着它们需要有名称和父对象。所以我有一个用户对象。

class User(Base):
    __name__ = 'user'
    __parent__ = ...

我已经在我的 RootFactory 中定义了我想要的 ACL。这一切都是在调用 RootFactory 的构造函数时设置的。我想将我所有类的父级设置为 RootFactory,但创建一个 RootFactory 实例,您需要将请求传递给构造函数(特别是因为我的 RootFactory 子类 pyramid_formalchemy.resources.Models)

但是在设置我的课程时我没有请求。

如何正确地将我的类上的 parent 设置为 RootFactory?

谢谢。

【问题讨论】:

    标签: python pyramid


    【解决方案1】:

    我在这里回答了一些关于在 pyramid_formalchemy 中处理 ACL 的类似问题:

    Pyramid and FormAlchemy admin interface

    基本上,pyramid_formalchemy 为所有管理 URL 定义了它自己的根工厂。您可以覆盖它并在那里定义一个__acl__(请参阅ModelsWithACL),这可能会解决您的大部分问题。从那个根开始, pyramid_formalchemy 将自动设置 __parent__ 引用。因此,如果您在对象上定义了一些特殊的 __acl__,将首先对其进行测试,然后 ACLAuthorizationPolicy 将查看 __parent__,这将是 ModelsModelsWithACL 对象。

    另见:

    http://docs.formalchemy.org/pyramid_formalchemy/#setting-permissions

    【讨论】:

    • 是的,我以前看过这个答案。我仍然面临的问题是 pyramid_formalchemy 机器没有在我的模型上设置 parent 属性。因此,当模型成为上下文并且授权策略向上移动时,ACLAuthorizationPolicy.permits() 会在模型本身上触底,并且永远不会进入我的自定义 RootFactory。 pyramid_formalchemy 在哪里设置模型的 parent
    • 我现在在 Models.__getitem__() 中看到了代码,你说得对,这确实在模型上设置了 parent。查看像 .../admin/User 作品和用户这样的页面。损坏的是 .../admin 页面本身。它应该列出我在调用formalchemy_admin() 时配置的所有模型。但是当调用 /admin 页面时 getitem__() 永远不会被调用,因此模型的 __parent 没有正确设置,我没有看到列出的模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多