我正在开发一个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小提琴。
答案 0 :(得分:1)
GeoServer直接支持per user layer access作为其standard security model的一部分。因此,您应该使用提供的测试机制,而不是手动滚动自己的解决方案。这允许您使用用户,组和角色设置安全性,这应该足以满足您的需求。
特别是GeoServer提供a JDBC authentication option来使用您现有的表格。
至于获取图层列表,您应该请求并解析getCapabilities文档,该文档仅包含用户有权查看的图层。