2011-11-02 42 views
0

我一直在使用URL調度的應用程序。我根據這裏發現的一些很好的信息設置了我的根工廠:https://github.com/mmerickel/pyramid_auth_demo(謝謝邁克爾!)混合URL調度和遍歷

現在我正在嘗試使用pyramid_formalchemy。似乎pyramid_formalchemy使用遍歷來確定授權。沒關係,但我堅持一點...

對於遍歷對象需要位置感知,這意味着他們需要有一個名稱和父母。所以我有一個用戶對象。

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

我在我的RootFactory中定義了我想要的ACL。當RootFactory的構造函數被調用時,這一切都得到設置。我想我所有的班的父母設爲RootFactory,但是創建你需要在請求中傳遞給構造(尤其是因爲我RootFactory子類pyramid_formalchemy.resources.Models)

一個RootFactory實例,但設立時我的課我沒有要求。

如何正確設置我的類上的到RootFactory?

謝謝。

回答

0

我已經回答了在這裏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

+0

是的,我以前看到這個答案。我仍然面臨的問題是pyramid_formalchemy機制沒有在我的模型上設置__parent__屬性。因此,當模型成爲上下文並且授權策略向上移動時,ACLAuthorizationPolicy.permits()會在模型本身出現底層,並且永遠不會將其傳遞到我的自定義RootFactory。 pyramid_formalchemy在模型上設置__parent__在哪裏? – lostdorje

+0

我現在在Models中看到代碼.__ getitem __()你說得對,這樣做對模型設置__parent__。查看.../admin /用戶作品和用戶列表。什麼是破壞是... /管理頁面本身。它應該列出我在調用formalchemy_admin()時配置的所有模型。但是當/ admin頁面被調用__getitem __()永遠不會被調用,所以模型的__parent__沒有設置correclty,我沒有看到列出的模型。 – lostdorje