Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

vigiboard / vigiboard / controllers / vigiboard_ctl / userutils.py @ 20367931

History | View | Annotate | Download (1.15 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 GetUserGroups():
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
    gr = DBSession.query(Groups.name).join(
20
        ( GroupPermissions , Groups.name == GroupPermissions.groupname ),
21
        ( Permission , Permission.permission_id == GroupPermissions.idpermission )
22
        ).filter(Permission.permission_name.in_(tg.request.environ.get('repoze.who.identity').get('permissions')))
23

    
24
    lst_grp = Set([i.name for i in gr])
25
    lst_tmp = lst_grp
26
    
27
    # On recherche maintenant les groupes indirect
28
    while len(lst_tmp) > 0:
29
        gr = DBSession.query(Groups.name).filter(Groups.parent.in_(lst_tmp))
30
        tmp = Set([])
31
        for i in gr :
32
            tmp.add(i.name)
33
            lst_grp.add(i.name)
34
        lst_tmp = tmp
35

    
36
    return lst_grp