簡體   English   中英

Pyramid 中基於動態用戶的授權

[英]Dynamic user based authorization in Pyramid

我正在遵循Pyramid 文檔中的安全指南以及 wiki 教程添加授權

現在我需要添加基於單個用戶而不是組的限制。

比方說,如果任何博客編輯都有權查看所有評論,那么只有帖子作者可以編輯帖子本身

對於我的根 ACL 中的第一個任務,如下所示:

__acl__ = [ (Allow, Everyone, 'view'),
            (Allow, Authenticated, 'view_profile'),
            (Allow, 'groups:editor', 'edit_comment')
]

但是對於edit_post呢?

我已經閱讀了這個答案,但由於我不需要構建資源樹,因此對我的需求來說似乎有點過分了。

通過在項目中創建Root資源,您已經擁有了一個“資源樹”。 您只需要在其上添加一個節點,該節點將返回一個Post posts ,其中包含僅包含授權用戶 ID 的特定__acl__ 然后,您可以讓您的edit_posts路由使用traverse='/posts/{post_id}'將您的資源樹遍歷到帶有__acl__Post object。

這並不難,而且是讓 Pyramid 為您做這些事情的方法。

如果您不想使用permission參數,您可以在視圖本身內部進行授權,就像 Kirk 建議的那樣。

此外,如果您不喜歡這種添加__acl__屬性和遍歷授權的方法,您可以實現自己的AuthorizationPolicy以使用給定的委托人列表和權限執行您希望它執行的操作。

Pyramid 的身份驗證系統的重點是它就在那里,這很棒。 Pyramid 絕不要求您使用它,對於不使用它的視圖,處理它不會影響性能。

你可能把這弄得太復雜了。 首先,如果訪問者是帖子的作者,則僅顯示指向edit_post視圖的鏈接。 通過使該視圖對不應該看到它的人不可見,這將解決 99% 的問題。 對於另外 1% - 聰明的用戶手動編輯 URL 以直接訪問編輯視圖 - 添加如下內容:

def edit_post(request):
    ...
    if authenticated_userid(request) != author:
        raise pyramid.httpexceptions.HTTPForbidden("You are not this post's author.")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM