6

Pyramid docsにあるセキュリティ ガイドラインと wiki チュートリアルAdd Authorizationに従っています

ここで、グループではなく単一のユーザーに基づいて制限を追加する必要があります。

たとえば、ブログ編集者がすべてのコメントを確認する権限を持っている場合、投稿者だけが投稿自体を編集できるとします

最初のタスクでは、次のようにルート ACL に含めます。

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

しかし、edit_postどうですか?

私はこの回答を読みましたが、リソースツリーを構築する必要がないため、私のニーズにはやり過ぎのようです。

4

2 に答える 2

8

プロジェクトにリソースを作成することで、すでに「リソースツリー」ができていRootます。ノードを追加するだけで、許可されたユーザーIDのみを含む特定のオブジェクトpostsが返されます。次に、ルートを使用して、リソースツリーをその上にあるオブジェクトまでトラバースできます。Post__acl__edit_poststraverse='/posts/{post_id}'Post__acl__

これは難しいことではなく、Pyramidにこのようなことをしてもらう方法です。

引数を使用したくない場合はpermission、Kirkが提案したように、ビュー自体の内部で承認を行うことができます。

__acl__また、承認のためにプロパティとトラバーサルを追加するこの方法が気に入らない場合はAuthorizationPolicy、特定のプリンシパルのリストと権限を使用して、独自の方法で実行したいことを実行できます。

Pyramidの認証システムのポイントは、そこにあるということです。これは素晴らしいことです。Pyramidは、決してそれを使用する必要はなく、それを使用しないビューの場合、それを処理することによるパフォーマンスへの影響はありません。

于 2011-07-05T20:04:59.000 に答える
4

これを複雑にしすぎている可能性があります。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.")
于 2011-07-05T16:23:01.823 に答える