Revision cdbbece8
Prise en compte des permissions de l'utilisateur pour la sélection d'un hôte/graphe suite à une recherche.
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@3612 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigigraph/controllers/rpc.py | ||
---|---|---|
454 | 454 |
liste permet d'assurer facilement une évolution vers des groupes |
455 | 455 |
de graphes récursifs. |
456 | 456 |
""" |
457 |
user = get_current_user() |
|
458 |
if user is None: |
|
459 |
return dict(items=[[], []]) |
|
457 | 460 |
|
458 | 461 |
# Ce cas ne devrait pas se produire, mais on tente |
459 | 462 |
# d'avoir un comportement gracieux malgré tout. |
... | ... | |
462 | 465 |
|
463 | 466 |
selected_hostgroups = [] |
464 | 467 |
selected_graphgroups = [] |
468 |
is_manager = in_group('managers').is_met(request.environ) |
|
465 | 469 |
|
466 |
# @TODO: ajouter la gestion des permissions au code qui suit.
|
|
467 |
# Pour le moment, la récupération de idsupitemgroup & idgraphgroup
|
|
468 |
# ne prend pas en compte les permissions réelles de l'utilisateur.
|
|
470 |
supitemgroups = []
|
|
471 |
if not is_manager:
|
|
472 |
supitemgroups = [sig[0] for sig in user.supitemgroups() if sig[1]]
|
|
469 | 473 |
|
470 | 474 |
if host: |
471 | 475 |
# Sélectionne l'identifiant du premier SupItemGroup auquel |
... | ... | |
476 | 480 |
(SUPITEM_GROUP_TABLE, SUPITEM_GROUP_TABLE.c.idgroup == \ |
477 | 481 |
SupItemGroup.idgroup), |
478 | 482 |
(Host, Host.idhost == SUPITEM_GROUP_TABLE.c.idsupitem), |
479 |
).filter(Host.name == host |
|
480 |
).scalar() |
|
483 |
).filter(Host.name == host) |
|
484 |
|
|
485 |
# On prend en compte les permissions de l'utilisateur. |
|
486 |
if not is_manager: |
|
487 |
idsuitemgroup = idsupitemgroup.filter( |
|
488 |
SupItemGroup.idgroup.in_(supitemgroups)) |
|
489 |
|
|
490 |
idsupitemgroup = idsupitemgroup.scalar() |
|
481 | 491 |
|
482 | 492 |
# Si on a trouvé un tel groupe, on renvoie les noms des |
483 | 493 |
# groupes de la hiérarchie à sélectionner pour arriver |
... | ... | |
498 | 508 |
# cette fois les GraphGroup à la place des SupItemGroup. |
499 | 509 |
idgraphgroup = DBSession.query( |
500 | 510 |
GraphGroup.idgroup, |
501 |
).distinct().join(
|
|
511 |
).join( |
|
502 | 512 |
(GRAPH_GROUP_TABLE, GRAPH_GROUP_TABLE.c.idgroup == \ |
503 | 513 |
GraphGroup.idgroup), |
504 | 514 |
(Graph, Graph.idgraph == GRAPH_GROUP_TABLE.c.idgraph), |
505 |
).filter(Graph.name == graph |
|
506 |
).scalar() |
|
515 |
).filter(Graph.name == graph) |
|
516 |
|
|
517 |
# On prend en compte les permissions de l'utilisateur. |
|
518 |
if not is_manager: |
|
519 |
idgraphgroup = idgraphgroup.filter( |
|
520 |
GraphGroup.idgroup.in_(supitemgroups)) |
|
521 |
|
|
522 |
idgraphgroup = idgraphgroup.scalar() |
|
507 | 523 |
|
508 | 524 |
# Même principe que pour l'hôte. |
509 | 525 |
if idgraphgroup is not None: |
510 | 526 |
selected_graphgroups = DBSession.query( |
511 | 527 |
GraphGroup.name, |
512 |
).distinct().join(
|
|
528 |
).join( |
|
513 | 529 |
(GroupHierarchy, GroupHierarchy.idparent == \ |
514 | 530 |
GraphGroup.idgroup), |
515 | 531 |
).filter(GroupHierarchy.idchild == idgraphgroup |
Also available in: Unified diff