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
определяет свою собственную фабрику 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)