[2015/3/20 Mise à jour du contenu trouvé par diverses enquêtes. Quelque chose de différent]
L'authentification de l'utilisateur est disponible et le nom d'utilisateur est affiché dans la partie d'en-tête de n'importe quel écran de la page authentifiée, et le traitement standard lors de la création d'une application Web commune est automatisé.
--Définissez un view_decorator qui permet à la vue de s'exécuter uniquement si vous êtes authentifié et disposez de l'autorisation utilisateur
def permission_view_config(permission):
    def pvc(**params):
        settings = dict(permission=permission, _depth=1)
        settings.update(params)
        def wrapped_view_config(original_func):
            return view_config(**settings)(original_func)
        return wrapped_view_config
    return pvc
user_view_config = permission_view_config('user')
admin_view_config = permission_view_config('admin')
__init__.py
def groupfinder(user_code, request):
    if not request.user:
        return []
    elif request.user.is_admin:
        return ['group:users', 'group:admin']
    else:
        return ['group:users']
def get_user(request):
    user_id = unauthenticated_userid(request)
    if user_id is not None:
        return DBSession.query(User).get(user_id)
class RootFactory(object):
    __acl__ = [
        (Allow, 'group:users', 'user'),
        (Allow, 'group:admin', 'admin')
    ]
    def __init__(self, request):
        pass
def main(global_config, **settings):
    # ...
    config = Configurator(settings=settings, root_factory='.RootFactory')
    #Obtenir lorsque vous accédez à la propriété utilisateur de la demande_Spécifiez que vous devez être un utilisateur. C'est important.
    config.set_request_property(get_user, 'user', reify=True)
    authn_policy = AuthTktAuthenticationPolicy('...', callback=groupfinder, hashalg='sha512')
    authz_policy = ACLAuthorizationPolicy()
    config.set_authentication_policy(authn_policy)
    config.set_authorization_policy(authz_policy)
    # ...
Si vous l'utilisez comme ça
views.py
@user_view_config(route_name='index', renderer='templates/index.jinja2')
def index(request):
    #Ceci est uniquement pour les personnes qui ont l'autorisation d'utilisateur
    do_something_with(request.user)  #l'utilisateur peut être utilisé
    return {'name': 'my_app'}
@admin_view_config(route_name='index', renderer='templates/add_user.jinja2')
def add_user(request):
    #Ceci est uniquement pour ceux qui ont l'autorisation d'administrateur
    do_something_with(request.user)  #l'utilisateur peut être utilisé
    return {'name': 'my_app'}
inspiré par Implémenter un décorateur de vue personnalisé avec Pyramid
Recommended Posts