使用PostgreSQL限制用户访问图层

时间:2017-09-16 16:31:40

标签: sql postgresql openlayers geoserver

我正在开发一个WebGIS项目,其中包含许多使用GeoServer提供服务的图层。通过OpenLayers 3使用WMS访问这些图层。

所有图层的列表都存储在Postgres表格中。

+----+-----------+------------+
| id | layername | layerowner |
+----+-----------+------------+
|  1 | layer1    | user1      |
|  2 | layer2    | user2      |
|  3 | layer3    | user3      |
+----+-----------+------------+ 

此列表很重要,因为使用该表生成加载图层的javascript文件。 (我不确定这是否是一种正确的方法)。

var lyr1 = new ol.layer.Tile({
    title: 'LAYERNAME',
        source: new ol.source.TileWMS(({
            url: 'http://localhost:8080/geoserver/WORKSPACE/wms',
            params:{
                'LAYERS': 'LAYERNAME',
                'TILED': true
            },
            serverType: 'geoserver'
        })),
});

我为用户提供了另一张表格。

+----+----------+-----------+
| id | username | userlevel |
+----+----------+-----------+
|  1 | user1    | admin     |
|  2 | user2    | standard  |
|  3 | user3    | standard  |
+----+----------+-----------+

我需要根据用户限制对图层的访问。我最初想过使用userlevel来限制对图层的访问,但具有相同用户级别的用户可以访问该级别的所有图层。但我需要为特定用户提供对特定图层的访问权限。默认情况下,admin应该能够访问所有图层,但user1只能访问被授予访问权限的图层。我不知道如何做到这一点,我想不出办法。任何有关如何做到这一点的帮助或想法将不胜感激。

编辑:尝试在表格中为每个用户添加一列,并设置一个布尔值以检查他是否有权访问。我想这不是一个合适的解决方案,因为我需要为每个用户提供一个列。这是SQL小提琴。

SQL Fiddle

1 个答案:

答案 0 :(得分:1)

GeoServer直接支持per user layer access作为其standard security model的一部分。因此,您应该使用提供的测试机制,而不是手动滚动自己的解决方案。这允许您使用用户,组和角色设置安全性,这应该足以满足您的需求。

特别是GeoServer提供a JDBC authentication option来使用您现有的表格。

至于获取图层列表,您应该请求并解析getCapabilities文档,该文档仅包含用户有权查看的图层。