2013-08-26 36 views
3

是否有推薦的方法來測試金字塔應用程序中的安全設置?更具體地說,我使用路由和自定義路由工廠。通過細粒度的ACL,安全設置被分割到不同的位置:配置設置,工廠,在@view_config中設置的權限以及視圖內權限的事件顯式檢查。如何測試金字塔安全設置?

關於單元和功能測試(http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/testing.html)的頁面似乎沒有指示測試用戶A是否只能查看和修改他允許的數據的方法。

回答

4

這是功能測試。 Webtest可以保留會話cookie,以便您可以使用它來以用戶身份登錄和訪問各種頁面。至於測試應用程序的某些部分,您可以使用某些自定義(或僅使用自定義組合選項)來覆蓋身份驗證策略。

def make_test_groupfinder(principals=None): 
    def _groupfinder(u, r): 
     return principals 
    return _groupfinder 

然後你可以使用這個函數來模擬不同的校長。但是,如果您的應用程序也依賴於任何地方的authenticated_userid(request),則不會處理用戶標識。爲此,您必須用虛擬身份驗證替換身份驗證策略。

class DummyAuthenticationPolicy(object): 
    def __init__(self, userid, extra_principals=()): 
     self.userid = userid 
     self.extra_principals = extra_principals 

    def authenticated_userid(self, request): 
     return self.userid 

    def effective_principals(self, request): 
     principals = [Everyone] 
     if self.userid: 
      principals += [Authenticated] 
      principals += list(self.extra_principals) 
     return principals 

    def remember(self, request, userid, **kw): 
     return [] 

    def forget(self, request): 
     return [] 
+0

我正在使用mozilla persona進行登錄過程。我是否需要創建一個僅用於測試的虛假登錄視圖? – ascobol

+0

您需要一種以認證用戶的身份與您的應用交談的方式。獲取經過身份驗證的用戶的最簡單方法是登錄。還有很多其他的方法,但他們基本上都涉及到搞亂你的應用程序如何確定登錄用戶(testing.ini可以幫助你設置)。 –