Project

General

Profile

Revision cf4ae971

IDcf4ae971543d70775d74f04d62789cdde0adf54c
Parent 7e1403ac
Child 2d8c18dc

Added by Francois POIROTTE over 14 years ago

Début d'ajout de la gestion des permissions sur les données dans VigiGraph.

git-svn-id: https://vigilo-dev.si.c-s.fr/svn@2675 b22e2e97-25c9-44ff-b637-2e5ceca36478

View differences:

vigigraph/controllers/rpc.py
8 8

  
9 9
from pylons.i18n import ugettext as _, lazy_ugettext as l_
10 10
from tg import expose, response, request, redirect, config, url, exceptions
11
from sqlalchemy.orm import aliased
12 11
from repoze.what.predicates import not_anonymous
13 12

  
13
from sqlalchemy.orm import aliased
14
from sqlalchemy import or_
15

  
14 16
from vigigraph.lib.base import BaseController
15 17

  
16 18
from vigilo.models.session import DBSession
17
from vigilo.models.tables import LowLevelService, Host
19
from vigilo.models.tables import LowLevelService, Host, User
18 20
from vigilo.models.tables import SupItemGroup, GroupHierarchy
19 21
from vigilo.models.tables import PerfDataSource
20 22
from vigilo.models.tables import Graph, GraphGroup
......
27 29
        
28 30
from vigilo.turbogears.rrdproxy import RRDProxy
29 31
from vigilo.turbogears.nagiosproxy import NagiosProxy
32
from vigilo.turbogears.helpers import get_current_user
30 33

  
31 34
from vigigraph.widgets.searchhostform import SearchHostForm
32 35
from vigigraph.lib import graphs
......
68 71
        @note: L'ID des groupes est converti en chaîne de caractères
69 72
            dans le résultat.
70 73
        """
71
        topgroups = [(tpg.name, str(tpg.idgroup)) \
72
                    for tpg in SupItemGroup.get_top_groups()]
74
        user = get_current_user()
75
        if user is None:
76
            return dict(items=[])
77
        supitemgroups = user.supitemgroups()
78

  
79
        children = DBSession.query(
80
                SupItemGroup
81
            ).distinct(
82
            ).join(
83
                (GroupHierarchy, GroupHierarchy.idchild == SupItemGroup.idgroup)
84
            ).filter(GroupHierarchy.hops > 0)
85

  
86
        topgroups = DBSession.query(
87
                SupItemGroup,
88
            ).filter(SupItemGroup.idgroup.in_(supitemgroups)
89
            ).except_(children).order_by(SupItemGroup.name).all()
90
        topgroups = [(sig.name, str(sig.idgroup)) for sig in topgroups]
73 91
        return dict(items=topgroups)
74 92

  
75 93
    @expose('json')
......
88 106
        @note: L'ID des groupes est converti en chaîne de caractères
89 107
            dans le résultat.
90 108
        """
109
        user = get_current_user()
110
        if user is None:
111
            return dict(items=[])
112
        supitemgroups = user.supitemgroups()
113

  
91 114
        hostgroups = DBSession.query(
92 115
                SupItemGroup.name,
93 116
                SupItemGroup.idgroup,
......
96 119
                    SupItemGroup.idgroup),
97 120
            ).filter(GroupHierarchy.idparent == maingroupid
98 121
            ).filter(GroupHierarchy.hops == 1
122
            ).filter(SupItemGroup.idgroup.in_(supitemgroups)
99 123
            ).order_by(
100 124
                SupItemGroup.name.asc(),
101 125
            ).all()
......
114 138
        @return: hotes
115 139
        @rtype: document json (sous forme de dict)
116 140
        """
141
        user = get_current_user()
142
        if user is None:
143
            return dict(items=[])
144
        supitemgroups = user.supitemgroups()
145

  
117 146
        hosts = DBSession.query(
118 147
                Host.name,
119 148
                Host.idhost,
120 149
            ).join(
121 150
                (SUPITEM_GROUP_TABLE, SUPITEM_GROUP_TABLE.c.idsupitem == \
122 151
                    Host.idhost),
123
                (SupItemGroup, SupItemGroup.idgroup == \
124
                    SUPITEM_GROUP_TABLE.c.idgroup),
125
            ).filter(SupItemGroup.idgroup == othergroupid
152
            ).filter(SUPITEM_GROUP_TABLE.c.idgroup == othergroupid
153
            ).filter(SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups)
126 154
            ).order_by(
127 155
                Host.name.asc(),
128 156
            ).all()
......
142 170
        @return: groupes de service
143 171
        @rtype: document json (sous forme de dict)
144 172
        """
173
        user = get_current_user()
174
        if user is None:
175
            return dict(items=[])
176
        supitemgroups = user.supitemgroups()
177

  
145 178
        graphgroups = DBSession.query(
146 179
                GraphGroup.name,
147 180
                GraphGroup.idgroup,
......
156 189
                    GRAPH_PERFDATASOURCE_TABLE.c.idperfdatasource),
157 190
                (LowLevelService, LowLevelService.idservice == \
158 191
                    PerfDataSource.idservice),
159
            ).filter(
160
                LowLevelService.idhost == idhost
192
                (SUPITEM_GROUP_TABLE, or_(
193
                    SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idhost,
194
                    SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idservice,
195
                )),
196
            ).filter(LowLevelService.idhost == idhost
197
            ).filter(SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups)
161 198
            ).order_by(
162 199
                GraphGroup.name.asc()
163
            )
200
            ).all()
164 201
        
165
        print "@@@\n%s\n@@@" % graphgroups
166
        graphgroups = graphgroups.all()
167

  
168 202
        graphgroups = [(gg.name, str(gg.idgroup)) for gg in graphgroups]
169 203
        return dict(items=graphgroups)
170 204

  
......
180 214
        @return: graphes
181 215
        @rtype: document json (sous forme de dict)
182 216
        """
183
        graphs_l = DBSession.query(
217
        user = get_current_user()
218
        if user is None:
219
            return dict(items=[])
220
        supitemgroups = user.supitemgroups()
221

  
222
        graphs = DBSession.query(
184 223
                Graph.name,
185 224
                Graph.idgraph,
186 225
            ).distinct().join(
......
194 233
                    GRAPH_PERFDATASOURCE_TABLE.c.idperfdatasource),
195 234
                (LowLevelService, LowLevelService.idservice == \
196 235
                    PerfDataSource.idservice),
236
                (SUPITEM_GROUP_TABLE, or_(
237
                    SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idhost,
238
                    SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idservice,
239
                )),
197 240
            ).filter(GraphGroup.idgroup == idgraphgroup
198 241
            ).filter(LowLevelService.idhost == idhost
242
            ).filter(SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups)
199 243
            ).order_by(
200 244
                Graph.name.asc()
201
            )
202

  
203
        print "@@@\n%s\n@@@" % graphs_l
204
        graphs_l = graphs_l.all()
245
            ).all()
205 246

  
206
        graphs_l = [(pds.name, str(pds.idgraph)) for pds in graphs_l]
207
        return dict(items=graphs_l)
247
        graphs = [(pds.name, str(pds.idgraph)) for pds in graphs]
248
        return dict(items=graphs)
208 249

  
209 250
    @expose('json')
210 251
    def searchHostAndGraph(self, **kwargs):
......
222 263
        @return: couples hote-graphe
223 264
        @rtype: document json (sous forme de dict)
224 265
        """
266
        user = get_current_user()
267
        if user is None:
268
            return dict(items=[])
269
        supitemgroups = user.supitemgroups()
270

  
225 271
        host = kwargs.get('host')
226 272
        graph = kwargs.get('graph')
227 273
        items = None
228 274

  
229 275
        # On a un nom d'indicateur, mais pas de nom d'hôte,
230 276
        # on considère que l'utilisateur veut tous les indicateurs
231
        # correspondant au motif, quelque soit l'hôte.
277
        # correspondant au motif, quel que soit l'hôte.
232 278
        if graph is not None:
233 279
            if host is None:
234 280
                host = '*'
......
248 294
                        PerfDataSource.idperfdatasource),
249 295
                    (Graph, Graph.idgraph == \
250 296
                        GRAPH_PERFDATASOURCE_TABLE.c.idgraph),
297
                    (SUPITEM_GROUP_TABLE, or_(
298
                        SUPITEM_GROUP_TABLE.c.idsupitem == Host.idhost,
299
                        SUPITEM_GROUP_TABLE.c.idsupitem == LowLevelService.idservice,
300
                    )),
251 301
                ).filter(Host.name.ilike('%' + host + '%')
252 302
                ).filter(Graph.name.ilike('%' + graph + '%')
303
                ).filter(SUPITEM_GROUP_TABLE.c.idgroup.in_(supitemgroups)
253 304
                ).order_by(
254 305
                    Host.name.asc(),
255 306
                    Graph.name.asc(),
......
267 318
            host = sql_escape_like(host)
268 319
            items = DBSession.query(
269 320
                    Host.name.label('hostname'),
270
                ).filter(
271
                    Host.name.ilike('%' + host + '%')
321
                ).join(
322
                    (SUPITEM_GROUP_TABLE, SUPITEM_GROUP_TABLE.c.idsupitem == \
323
                        Host.idhost),
324
                ).filter(Host.name.ilike('%' + host + '%')
325
                ).filter(SUPITEM_GROUP_TABLE.c.idsupitem.in_(supitemgroups)
272 326
                ).order_by(Host.name.asc())
273 327

  
274 328
        items = items.limit(100).all()

Also available in: Unified diff