5

フォーマルケミー管理インターフェースを使用したピラミッドプロジェクトがあります。基本的なACL認証を追加しましたが、pyramid_formalchemyプラグインは、認証されていても常に拒否します。

認証されたユーザーのみがpyramid_formalchemy管理インターフェースを使用できるようにする方法について何か考えはありますか?

承認ポリシーは次のように追加されました。

authn_policy = AuthTktAuthenticationPolicy('MYhiddenSECRET'、callback = groupfinder)
authz_policy = ACLAuthorizationPolicy()

config = Configurator(
   settings = settings、
   root_factory ='package.auth.RootFactory'、
   authentication_policy = authn_policy、
   authentication_policy = authz_policy
)。

#pyramid_formalchemyの構成
config.include('pyramid_formalchemy')
config.include('fa.jquery')
config.formalchemy_admin('admin'、package ='package'、view ='fa.jquery.pyramid.ModelView')
4

1 に答える 1

11

pyramid_formalchemyアクセス許可'view', 'edit', 'delete', 'new'を使用して、誰が何を実行できるかを決定します。は__acl__、SQLAlchemy モデル オブジェクトから伝播されます。したがって、__acl__各モデル オブジェクトに を配置して、目的のグループがそれらの権限にアクセスできるようにする必要があります。たとえば、pyramid_formalchemy pyramidappサンプル プロジェクトから:

class Bar(Base):
    __tablename__ = 'bar'
    __acl__ = [
            (Allow, 'admin', ALL_PERMISSIONS),
            (Allow, 'bar_manager', ('view', 'new', 'edit', 'delete')),
        ]
    id = Column(Integer, primary_key=True)
    foo = Column(Unicode(255))

もちろん、 を指定しない場合は__acl__、 に到達するまでリソース ツリーの系譜を調べますfactory。デフォルトでpyramid_formalchemyは、独自の factory を定義しpyramid_formalchemy.resources.Modelsますが、これをサブクラス化し__acl__、すべてのモデルのグローバルとして を提供できます。

from pyramid_formalchemy.resources import Models

class ModelsWithACL(Models):
    """A factory to override the default security setting"""
    __acl__ = [
            (Allow, 'admin', ALL_PERMISSIONS),
            (Allow, Authenticated, 'view'),
            (Allow, 'editor', 'edit'),
            (Allow, 'manager', ('new', 'edit', 'delete')),
        ]

config.formalchemy_admin('admin', package='package', view=..., factory=ModelsWithACL)
于 2011-04-15T15:13:42.360 に答える