1

認証されていないユーザーにはアクセス許可を許可したいが、認証されたユーザーには許可を拒否したい。

# works
__acl__ = [
    (Deny, Authenticated, 'something'),
    (Allow, Everyone, 'something'),
]

# order changed -- DOES NOT WORK
__acl__ = [
    (Allow, Everyone, 'something'),
    (Deny, Authenticated, 'something'),
]

私の質問は、認証されていないユーザーを認証されたユーザーから除外する正しい方法ですか? Pyramid でこれを行うより明確な方法はありますか? NonAuthenticated(これは)と言って、認証されていないユーザーをどのように描写できますかEveryone - Authenticated

より一般的な質問は次のとおりです: あるグループに属し、別のグループに属していないユーザーをどのようにフィルター処理する必要がありますか?

4

1 に答える 1

4

AuthenticatedおよびEveryoneプリンシパルです (実際、これらは単なる文字列です)。各ユーザーには、プリンシパルのリストがあります (デフォルト[username, Authenticated, Everyone]では、認証済みユーザー[Everyone]用、その他のユーザー用)。プリンシパルに対してアンサンブル演算を行うことはできないため、NonAuthenticated計算元Everyoneおよびを定義することはできませんAuthenticated

できることは、ACL の順序を使用して、必要なものを記述することです。ドキュメントには、ACL が順番に処理され、ユーザーのプリンシパルに一致する最初のものがユーザーであることが記載されています。したがって、グループ B に属している場合を除いて、グループ A のユーザーにアクセス権を付与したい場合 (プリンシパル 'group:A' を持ち、'group:B' を持たない方法) を書くことができます。

__acl__ = [
    (Deny, 'group:B', 'something'),   # If user in B, deny
    (Allow, 'group:A', 'something'),  # Else (=if user not in B), if user in A, allow
    (Deny, Everyone, 'something'),    # Else, Deny
]
于 2013-03-22T09:15:27.117 に答える