我正在開發一個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 –