2011-04-15 19 views
5

Formalchemy yönetici arayüzünü kullanarak bir piramit projem var. Temel ACL kimlik doğrulamasını ekledim ve pyramid_formalchemy eklentisi her zaman doğrulanmış olsa bile reddeder.Piramit ve FormAlchemy yönetici arayüzü

Sadece kimliği doğrulanmış kullanıcıların pyramid_formalchemy yönetici arabirimini kullanmasına nasıl izin verildiği ile ilgili düşünceleriniz var mı?

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

config = Configurator(
    settings=settings, 
    root_factory='package.auth.RootFactory', 
    authentication_policy=authn_policy, 
    authorization_policy=authz_policy 
) 

# pyramid_formalchemy's configuration 
config.include('pyramid_formalchemy') 
config.include('fa.jquery') 
config.formalchemy_admin('admin', package='package', view='fa.jquery.pyramid.ModelView') 

cevap

11

pyramid_formalchemy kimin ne yapabileceğini belirlemek için izinler 'view', 'edit', 'delete', 'new' kullanır:

yetkilendirme ilkesi

böyle eklemek oldu. __acl__, SQLAlchemy model nesnesinden aşağı doğru yayılır. Böylece, model gruplarınızın her birine __acl__ koymanız ve istediğiniz gruplara bu izinlere erişebilmeniz gerekir. Örneğin, pyramid_formalchemy pyramidapp örnek projesinden: Elbette

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)) 

, bunu factory vurur kadar bir __acl__ o zaman kaynak ağacının soyunda bakacağız kaynağı yoksa. Varsayılan olarak, pyramid_formalchemy kendi fabrika pyramid_formalchemy.resources.Models tanımlar, ancak size modellerin tümü için global olarak, bu alt sınıfı ve buna bir __acl__ sağlayabilir:

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) 
+0

Büyük cevabı ve büyük bir açıklama. Teşekkürler! –