Skip to content

Commit eb7c98f

Browse files
committed
[Server] Fix WMS GetContext accesscontrol and add tests
1 parent ac97341 commit eb7c98f

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

src/server/qgswmsprojectparser.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1607,6 +1607,12 @@ void QgsWMSProjectParser::addOWSLayers( QDomDocument &doc,
16071607
{
16081608
continue;
16091609
}
1610+
#ifdef HAVE_SERVER_PYTHON_PLUGINS
1611+
if ( !mAccessControl->layerReadPermission( currentLayer ) )
1612+
{
1613+
continue;
1614+
}
1615+
#endif
16101616
if ( nonIdentifiableLayers.contains( currentLayer->id() ) )
16111617
{
16121618
layerElem.setAttribute( "queryable", "false" );

tests/src/python/test_qgsserver_accesscontrol.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import tempfile
2929
import urllib
3030
import base64
31+
import re
3132

3233

3334
XML_NS = \
@@ -237,6 +238,34 @@ def test_wms_getprojectsettings(self):
237238
str(response).find("<LayerDrawingOrder>Country_Labels,dem,Hello_Filter_SubsetString,Hello_Project_SubsetString,Hello_SubsetString,Hello,db_point</LayerDrawingOrder>") != -1,
238239
"LayerDrawingOrder in GetProjectSettings\n%s" % response)
239240

241+
def test_wms_getcontext(self):
242+
query_string = "&".join(["%s=%s" % i for i in {
243+
"MAP": urllib.quote(self.projectPath),
244+
"SERVICE": "WMS",
245+
"VERSION": "1.1.1",
246+
"REQUEST": "GetContext"
247+
}.items()])
248+
249+
response, headers = self._get_fullaccess(query_string)
250+
self.assertTrue(
251+
str(response).find("<Layer opacity=\"1\" queryable=\"true\" hidden=\"false\" id=\"Hello\" name=\"Hello\">") != -1,
252+
"No Hello layer in GetContext\n%s" % response)
253+
self.assertTrue(
254+
str(response).find("<Layer opacity=\"1\" queryable=\"true\" hidden=\"false\" id=\"Country\" name=\"Country\">") != -1,
255+
"No Country layer in GetContext\n%s" % response)
256+
self.assertTrue(
257+
str(response).find("<Layer opacity=\"1\" queryable=\"true\" hidden=\"false\" id=\"Country\" name=\"Country\">")
258+
< str(response).find("<Layer opacity=\"1\" queryable=\"true\" hidden=\"false\" id=\"Hello\" name=\"Hello\">"),
259+
"Hello layer not after Country layer\n%s" % response)
260+
261+
response, headers = self._get_restricted(query_string)
262+
self.assertTrue(
263+
str(response).find("<Layer opacity=\"1\" queryable=\"true\" hidden=\"false\" id=\"Hello\" name=\"Hello\">") != -1,
264+
"No Hello layer in GetContext\n%s" % response)
265+
self.assertFalse(
266+
str(response).find("<Layer opacity=\"1\" queryable=\"true\" hidden=\"false\" id=\"Country\" name=\"Country\">") != -1,
267+
"Country layer in GetContext\n%s" % response)
268+
240269
def test_wms_describelayer_hello(self):
241270
query_string = "&".join(["%s=%s" % i for i in {
242271
"MAP": urllib.quote(self.projectPath),

0 commit comments

Comments
 (0)