我正在开发一个WebGIS项目,其中包含大量使用GeoServer服务的图层。使用WMS通过OpenLayers 3访问图层。限制用户使用PostgreSQL访问图层
所有图层的列表都存储在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
来限制对图层的访问,但具有相同用户级别的用户将有权访问该级别的所有图层。但是我需要为特定用户提供访问特定图层的功能。默认情况下,管理员应该能够访问所有图层,但user1
只能访问他被授予访问权的图层。我不知道如何做到这一点,我想不出办法做到这一点。任何帮助或想法如何做到这一点将不胜感激。
编辑:试着为表中的每个用户添加一列,并设置一个布尔值来检查他是否有权访问。我想这不是一个合适的解决方案,因为我需要为每个用户提供一个列。这是SQL小提琴。
行级安全性? –
我想是的。我使用会话变量来检查哪个用户登录,并且用户应该只能访问分配给他的图层(layers表中的行?)。我想我需要一些方法来限制users表中列出的用户访问layers表中的所有图层(行?)。 – pavankguduru
https://www.postgresql.org/docs/current/static/ddl-rowsecurity.html –