Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

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

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

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

    
39
    return lst_grp