Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_userutils.py @ 7365fb51

History | View | Annotate | Download (2.7 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
"""
4
Teste l'héritage des permissions sur les groupes d'hôtes/services.
5
"""
6
import tg
7
import transaction
8
from nose.tools import assert_true
9

    
10
from vigilo.models.session import DBSession
11
from vigilo.models import HostGroup, Permission, User
12
from vigiboard.tests import TestController
13

    
14
class TestGroupPermissionsInheritance(TestController):
15
    """Test retrieval of groups of hosts/services."""
16
    def test_groups_inheritance(self):
17
        """
18
        S'assure que les groupes sont correctement hérités.
19
        """
20

    
21
        # Création de 2 groupes d'utilisateurs.
22
        hosteditors = HostGroup(name=u'hosteditors', parent=None)
23
        DBSession.add(hosteditors)
24

    
25
        hostmanagers = HostGroup(name=u'hostmanagers', parent=hosteditors)
26
        DBSession.add(hostmanagers)
27

    
28
        # L'attribution des permissions.
29
        manage_perm = Permission.by_permission_name(u'manage')
30
        edit_perm = Permission.by_permission_name(u'edit')
31

    
32
        manage_perm.hostgroups.append(hostmanagers)
33
        edit_perm.hostgroups.append(hosteditors)
34
        DBSession.flush()
35
        transaction.commit()
36

    
37
        # On obtient les variables de session comme si on était loggué
38
        # en tant que manager.
39
        environ = {'REMOTE_USER': 'manager'}
40
        response = self.app.get('/', extra_environ=environ)
41
        
42
        # On récupère la liste des groups auxquels l'utilisateur appartient.
43
        username = response.request.environ \
44
            ['repoze.who.identity'] \
45
            ['repoze.who.userid']
46
        grp = User.by_user_name(username).groups
47

    
48
        # Permet de rafraîchir les instances.
49
        hostmanagers = DBSession.query(HostGroup).filter(
50
                            HostGroup.name==u'hostmanagers').one()
51
        hosteditors = DBSession.query(HostGroup).filter(
52
                            HostGroup.name==u'hosteditors').one()
53

    
54
        # On vérifie que la liste est correcte : le manager doit avoir accès
55
        # aux groupes 'hostmanagers' & 'hosteditors' (dont il hérite).
56
        assert_true(hostmanagers.idgroup in grp and
57
            hosteditors.idgroup in grp,
58
            msg = "il est dans %s" % grp)
59

    
60
        # On recommence avec l'utilisateur editor.
61
        environ = {'REMOTE_USER': 'editor'}
62
        response = self.app.get('/', extra_environ=environ)
63

    
64
        username = response.request.environ \
65
            ['repoze.who.identity'] \
66
            ['repoze.who.userid']
67
        grp = User.by_user_name(username).groups
68

    
69
        # L'utilisateur editor ne doit avoir accès qu'au groupe 'hosteditors'.
70
        assert_true(not(hostmanagers.idgroup in grp) and
71
            hosteditors.idgroup in grp,
72
            msg = "il est dans %s" % grp)
73