37.7. ADDING AUTHORIZATION
1 from pyramid.config import Configurator
2 from pyramid.authentication import AuthTktAuthenticationPolicy
3 from pyramid.authorization import ACLAuthorizationPolicy
4
5 from sqlalchemy import engine_from_config
6
7 from tutorial.security import groupfinder
8
9 from .models import DBSession
10
11def main(global_config, **settings):
12""" This function returns a Pyramid WSGI application.
13"""
14engine = engine_from_config(settings, ’sqlalchemy.’)
15DBSession.configure(bind=engine)
16authn_policy = AuthTktAuthenticationPolicy(
17’sosecret’, callback=groupfinder)
18authz_policy = ACLAuthorizationPolicy()
19config = Configurator(settings=settings,
20 |
root_factory=’tutorial.models.RootFactory’) |
21config.set_authentication_policy(authn_policy)
22config.set_authorization_policy(authz_policy)
23config.add_static_view(’static’, ’static’, cache_max_age=3600)
24config.add_route(’view_wiki’, ’/’)
25config.add_route(’login’, ’/login’)
26config.add_route(’logout’, ’/logout’)
27config.add_route(’view_page’, ’/{pagename}’)
28config.add_route(’add_page’, ’/add_page/{pagename}’)
29config.add_route(’edit_page’, ’/{pagename}/edit_page’)
30config.scan()
31return config.make_wsgi_app()
37.7.3 Adding an authentication policy callback
Add a tutorial/security.py module within your package (in the same directory as __init__.py, views.py, etc.) with the following content:
1 USERS = {’editor’:’editor’,
2’viewer’:’viewer’}
3 GROUPS = {’editor’:[’group:editors’]}
4
5 def groupfinder(userid, request):