vigiboard / vigiboard / controllers / vigiboard_ctl / userutils.py @ 9c0dbb6a
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.permission_id == 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
|