Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / tests / functional / test_userutils.py @ 5dbfa80d

History | View | Annotate | Download (2.69 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 transaction
7
from nose.tools import assert_true
8

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

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

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

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

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

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

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

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

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

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

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

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