Projet

Général

Profil

0004-attributes_ng-retrieve-both-static-and-session-roles.patch

Valentin Deniaud, 13 juin 2019 10:41

Télécharger (2,77 ko)

Voir les différences:

Subject: [PATCH] attributes_ng: retrieve both static and session roles
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Le parti pris ici c'est qu'on prend par défaut les rôles dynamiques. Ça
permet de ne rien changer dans hobo et d'avoir le comportement attendu
(les rôles dynamiques sont envoyés dans le SAML), mais à part ça c'est
pas forcément logique.
 .../attributes_ng/sources/django_user.py      | 27 ++++++++++++-------
 1 file changed, 18 insertions(+), 9 deletions(-)
src/authentic2/attributes_ng/sources/django_user.py
100 100
    ctx['django_user_full_name'] = user.get_full_name()
101 101
    Role = get_role_model()
102 102
    user_auth_level = ctx['request'].session.get('auth_level', 1)
103
    roles = Role.objects.for_user(user, max_auth_level=user_auth_level)
104
    ctx['a2_role_slugs'] = roles.values_list('slug', flat=True)
105
    ctx['a2_role_names'] = roles.values_list('name', flat=True)
106
    ctx['a2_role_uuids'] = roles.values_list('uuid', flat=True)
107
    if 'service' in ctx and getattr(ctx['service'], 'ou', None):
108
        ou = ctx['service'].ou
109
        ctx['a2_service_ou_role_slugs'] = roles.filter(ou=ou).values_list('slug', flat=True)
110
        ctx['a2_service_ou_role_names'] = roles.filter(ou=ou).values_list('name', flat=True)
111
        ctx['a2_service_ou_role_uuids'] = roles.filter(ou=ou).values_list('uuid', flat=True)
103
    for role_type in ('session', 'static'):
104
        if role_type == 'session':
105
            prefix = 'a2_'
106
            roles = Role.objects.for_user(user, max_auth_level=user_auth_level)
107
        else:
108
            prefix = 'a2_static_'
109
            roles = Role.objects.for_user(user)
110
        ctx[prefix + 'role_slugs'] = roles.values_list('slug', flat=True)
111
        ctx[prefix + 'role_names'] = roles.values_list('name', flat=True)
112
        ctx[prefix + 'role_uuids'] = roles.values_list('uuid', flat=True)
113
        if 'service' in ctx and getattr(ctx['service'], 'ou', None):
114
            ou = ctx['service'].ou
115
            ctx[prefix + 'service_ou_role_slugs'] = \
116
                roles.filter(ou=ou).values_list('slug', flat=True)
117
            ctx[prefix + 'service_ou_role_names'] = \
118
                roles.filter(ou=ou).values_list('name', flat=True)
119
            ctx[prefix + 'service_ou_role_uuids'] = \
120
                roles.filter(ou=ou).values_list('uuid', flat=True)
112 121
    return ctx
113
-