Project

General

Profile

Revision ddbaec88

IDddbaec886274cfe4c6b7eb09b14f5baa774e0fdf
Parent 98760d1b
Child fc43af7e

Added by Francois POIROTTE almost 13 years ago

Activation du cache des permissions (#577)

Modifie l'ordre des middlewares WSGI afin que les couches apportées par
Beaker (gestion du cache et gestion des sessions) soient disponibles
depuis les couches d'authentification/autorisations (repoze.who et
repoze.what).

Ceci permet d'activer réellement le cache des permissions au niveau du
plugin Kerberos (auparavant, la fonctionnalité était présent, mais
inutilisable car Beaker ne se trouvait pas dans la pile de couches).

Ce changeset remplace également le plugin d'authentification Kerberos
pour supprimer les méthodes responsables de l'identification et de
l'authentification de l'utilisateur par une unique méthode d'ajout de
méta-données (mdprovider).
De fait, le plugin sera correctement appelé avec le nouveau code pour la
pile d'authentification (afin de créer l'utilisateur dans Vigilo
correspondant à l'utilisateur externe).
Le plugin a été renommé (nom plus explicite/réaliste) et déplacé à cet
endroit : `vigilo.turbogears.repoze.plugins.mdldapsync`.
Ceci introduit une dépendance sur python-ldap dans vigilo.turbogears.

Ce changement centralise tout ce qui concerne repoze.wh(o|at) dans
vigilo.turbogears.repoze.
Le classifier a été modifié pour identifier spécifiquement les requêtes
authentifiée par un mécanisme externe (ex: Kerberos).
Les plugins ont vu leur nom changer radicalement et se trouvent
désormais chacun dans un fichier séparé (sqlauth, mduser, mdgroups).

Un nouveau module (d'identification) pour repoze.who a été ajouté dans
`vigilo.turbogears.repoze.plugins.externalid`. Ce module permet de
pré-authentifier un utilisateur à partir du contenu d'une session
Beaker. Il sera utilisé avec `mdldapsync` qui mémorise déjà l'identité
d'un utilisateur authentifié via un mécanisme externe dans la session
Beaker.

Les fichiers .ini des différentes IHM ont été mis à jour en conséquence.

Les méthodes liées à l'authentification dans les contrôleurs !TurboGears
ont été mises en commun dans `vigilo.turbogears.controllers.auth`.

Refs: #577.
Change-Id: Ia2d600622fd623e1a4474a4ea24fef3b3b503c12
Reviewed-on: https://vigilo-dev.si.c-s.fr/review/377
Tested-by: Build system <>
Reviewed-by: Aurelien BOMPARD <>

View differences:

vigiboard/tests/functional/test_group_selection_tree.py
51 51
            json, {'items': [], 'groups': []}
52 52
        )
53 53

  
54
    def test_get_group_when_not_allowed(self):
55
        """Récupération de l'étage de l'arbre sans les droits"""
56

  
54
    def test_get_group_anonymous(self):
55
        """Récupération de l'étage de l'arbre en anonyme"""
57 56
        # Récupération du groupe utilisé lors de ce test.
58 57
        group2 = SupItemGroup.by_group_name(u'group2')
59 58

  
......
62 61
        response = self.app.get('/get_groups?parent_id=%d' % group2.idgroup,
63 62
            status=401)
64 63

  
64
    def test_get_group_when_not_allowed(self):
65
        """Récupération de l'étage de l'arbre sans les droits"""
66

  
67
        # Récupération du groupe utilisé lors de ce test.
68
        group2 = SupItemGroup.by_group_name(u'group2')
69

  
65 70
        # L'utilisateur est authentifié avec des permissions
66 71
        # restreintes. Il cherche à obtenir la liste des groupes fils
67 72
        # d'un groupe auquel il n'a pas accès, même indirectement.
......
93 98
        # bien les groupes fils de ce groupe parent
94 99
        self.assertEqual(
95 100
            json, {
96
                'items': [], 
101
                'items': [],
97 102
                'groups': [
98 103
                    {'id': maingroup.idgroup, 'name': maingroup.name, 'type': 'group'}
99 104
                ]
......
111 116
        # bien les groupes fils de ce groupe parent
112 117
        self.assertEqual(
113 118
            json, {
114
                'items': [], 
119
                'items': [],
115 120
                'groups': [
116 121
                    {'id': maingroup.idgroup, 'name': maingroup.name, 'type': 'group'}
117 122
                ]
......
127 132
        # On s'assure que la liste retournée contient
128 133
        # bien les groupes fils de ce groupe parent.
129 134
        self.assertEqual(json, {
130
                'items': [], 
135
                'items': [],
131 136
                'groups': [
132 137
                    {'id': group1.idgroup, 'name': group1.name, 'type': 'group'},
133 138
                    {'id': group2.idgroup, 'name': group2.name, 'type': 'group'}
......
145 150
        # On s'assure que la liste retournée contient bien ce groupe fils.
146 151
        self.assertEqual(
147 152
            json, {
148
                'items': [], 
153
                'items': [],
149 154
                'groups': [
150 155
                    {'id': group1.idgroup, 'name': group1.name, 'type': 'group'}
151 156
                ]
......
162 167
        # le groupe parent du groupe auquel il a accès.
163 168
        self.assertEqual(
164 169
            json, {
165
                'items': [], 
170
                'items': [],
166 171
                'groups': [
167 172
                    {'id': maingroup.idgroup, 'name': maingroup.name, 'type': 'group'}
168 173
                ]
......
184 189
        # On s'assure que la liste retournée contient bien le groupe racine.
185 190
        self.assertEqual(
186 191
            json, {
187
                'items': [], 
192
                'items': [],
188 193
                'groups': [
189 194
                    {'id': root.idgroup, 'name': root.name, 'type': 'group'}
190 195
                ]
......
201 206
        # groupe racine, auquel cet utilisateur a directement accès.
202 207
        self.assertEqual(
203 208
            json, {
204
                'items': [], 
209
                'items': [],
205 210
                'groups': [
206 211
                    {'id': root.idgroup, 'name': root.name, 'type': 'group'}
207 212
                ]
......
218 223
        # groupe racine, auquel cet utilisateur a indirectement accès.
219 224
        self.assertEqual(
220 225
            json, {
221
                'items': [], 
226
                'items': [],
222 227
                'groups': [
223 228
                    {'id': root.idgroup, 'name': root.name, 'type': 'group'}
224 229
                ]
225 230
            }
226 231
        )
227 232

  
233
    def test_get_root_group_anonymous(self):
234
        """Récupération des groupes racines de l'arbre en anonyme"""
235
        # L'utilisateur n'est pas authentifié, et cherche
236
        # à obtenir la liste des groupes racines de l'arbre.
237
        response = self.app.get('/get_groups', status=401)
238

  
239

  
228 240
    def test_get_root_group_when_not_allowed(self):
229 241
        """Récupération des groupes racines de l'arbre sans les droits"""
230

  
231 242
        # Récupération du groupe utilisé lors de ce test.
232 243
        root = SupItemGroup.by_group_name(u'root')
233 244

  
234
        # L'utilisateur n'est pas authentifié, et cherche
235
        # à obtenir la liste des groupes racines de l'arbre.
236
        response = self.app.get('/get_groups', status=401)
237

  
238 245
        # Création d'un nouvel utilisateur et d'un nouveau groupe
239 246
        usergroup = UserGroup(group_name=u'new_users')
240 247
        vigiboard_perm = Permission.by_permission_name(u'vigiboard-access')
......
246 253
        )
247 254
        user.usergroups.append(usergroup)
248 255
        DBSession.add(user)
256
        DBSession.flush()
257
        transaction.commit()
249 258

  
250 259
        # L'utilisateur est authentifié mais n'a aucun accès. Il
251 260
        # cherche à obtenir la liste des groupes racines de l'arbre.
......
256 265
        # On s'assure que la liste retournée est bien vide.
257 266
        self.assertEqual(
258 267
            json, {
259
                'items': [], 
268
                'items': [],
260 269
                'groups': []
261 270
            }
262 271
        )
263

  

Also available in: Unified diff