モデル内で定義することにより、ピラミッド認証ポリシーを使用できます。例えば:__acl__()
Report
from sqlalchemy.orm import relationship, backref
from pyramid.security import Everyone, Allow
class Report(Base):
# ...
user_id = Column(Integer, ForeignKey('user.id'))
# ...
@property
def __acl__(self):
return [
(Allow, Everyone, 'view'),
(Allow, self.user_id, 'edit'),
]
# this also works:
#__acl__ = [
# (Allow, Everyone, 'view'),
# (Allow, self.user_id, 'edit'),
#]
class User(Base):
# ...
reports = relationship('Report', backref='user')
上記__acl__()
では、誰もがあなたのビューを呼び出すことができますが、それに関連するview
ユーザーのみが呼び出すことができます。Report
edit
ドキュメントを引用すると、認証ポリシーまたは承認ポリシーが有効になっていない可能性があります。
Configuratorのset_authorization_policy()メソッドを使用して、許可ポリシーを有効にします。
許可ポリシーを有効にするには、認証ポリシーも有効にする必要があります。これは、一般に、承認は認証に依存するためです。アプリケーションのセットアップ中にset_authentication_policy()とメソッドを使用して、認証ポリシーを指定します。
from pyramid.config import Configurator
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
authentication_policy = AuthTktAuthenticationPolicy('seekrit')
authorization_policy = ACLAuthorizationPolicy()
config = Configurator()
config.set_authentication_policy(authentication_policy)
config.set_authorization_policy(authorization_policy)
上記の構成により、単一のプリンシパルへの参照を含むリクエストの環境で渡された「認証チケット」Cookieの値を、ビューを呼び出そうとしたときにリソースツリーで見つかったACLに存在するプリンシパルと比較するポリシーが有効になります。
さまざまな認証ポリシーと承認ポリシーを組み合わせて使用することは可能ですが、Pyramidアプリケーションを認証ポリシーを使用して構成し、承認ポリシーを使用しない場合、またはその逆を行う場合はエラーになります。これを行うと、アプリケーションの起動時にエラーが発生します。