Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / controllers / userutils.py @ d3c47597

History | View | Annotate | Download (1.21 KB)

1
# -*- coding: utf-8 -*-
2
# vim:set expandtab tabstop=4 shiftwidth=4:
3
"""Fonctions utiles en rapport avec l'utilisateur"""
4

    
5
from vigiboard.model import DBSession, Permission, Groups, GroupPermissions
6
from sets import Set
7
import tg 
8

    
9
def get_user_groups():
10
    
11
    """
12
    Permet de connaître l'ensemble des groups d'hôte et de service de vigiboard
13
    auquel l'utilisateur appartient
14

15
    @return: Liste des groups
16
    """
17

    
18
    # Requête permettant d'obtenir les groups directs de l'utilisateur
19

    
20
    groups = DBSession.query(Groups.name).join(
21
        ( GroupPermissions , Groups.name == GroupPermissions.groupname ),
22
        ( Permission ,
23
            Permission.idpermission == GroupPermissions.idpermission )
24
        ).filter(Permission.permission_name.in_(
25
            tg.request.environ.get('repoze.who.identity').get('permissions')
26
        ))
27
    
28
    lst_grp = Set([i.name for i in groups])
29
    lst_tmp = lst_grp
30
    
31
    # On recherche maintenant les groupes indirect
32
    
33
    while len(lst_tmp) > 0:
34
        groups = DBSession.query(Groups.name).filter(Groups.parent.in_(lst_tmp))
35
        tmp = Set([])
36
        for i in groups :
37
            tmp.add(i.name)
38
            lst_grp.add(i.name)
39
        lst_tmp = tmp
40

    
41
    return lst_grp