Project

General

Profile

Revision cdbbece8

IDcdbbece8b574ffdaa2b05a154a919ec058dade3b
Parent fcbdba7c
Child d1ea2257

Added by Francois POIROTTE about 14 years ago

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

View differences:

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