【发布时间】:2017-09-16 16:31:40
【问题描述】:
我正在开发一个 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 来限制对层的访问,但是具有相同用户级别的用户将可以访问该级别的所有层。但我需要一些东西,比如为特定用户提供对特定层的访问。默认情况下,管理员应该能够访问所有层,但 user1 只能访问他被授予访问权限的层。我不知道如何做到这一点,我想不出办法做到这一点。任何有关如何执行此操作的帮助或想法将不胜感激。
编辑:尝试为表中的每个用户添加一列,并设置一个布尔值以检查他是否具有访问权限。我想这不是一个合适的解决方案,因为我需要为每个用户提供一个列。这是 SQL Fiddle。
【问题讨论】:
-
行级安全性?
-
我想是的。我使用会话变量来检查哪个用户已登录,并且该用户应该只能访问分配给他的图层(图层表中的行?)。我想我需要一些方法来限制用户表中列出的用户访问层表中的所有层(行?)。
标签: sql postgresql openlayers geoserver