GeoServerを使用して提供される多くのレイヤを含むWebGISプロジェクトに取り組んでいます。レイヤーは、OpenLayers 3を介してWMSを使用してアクセスされます。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'
})),
});
私はこのようなユーザーのための別のテーブルを持っています。
ユーザーに基づいてレイヤーへのアクセスを制限する必要があります。最初はuserlevel
を使用してレイヤーへのアクセスを制限することを考えましたが、同じユーザーレベルのユーザーはそのレベルのすべてのレイヤーにアクセスできます。しかし、特定のユーザーに特定のレイヤーへのアクセスを提供するようなものが必要です。デフォルトでは、adminはすべてのレイヤーにアクセスできるはずですが、user1
はアクセス権が与えられたレイヤーにのみアクセスできます。私はこれを行う方法について知識がなく、私はそれを行う方法を考えることができません。これを行う方法に関する助言やアイディアは高く評価されます。
編集:テーブル内の各ユーザーの列を追加し、アクセス権があるかどうかを確認するブール値を設定しようとしました。私はすべてのユーザーに列を提供する必要があるので、これは適切な解決策ではないと思います。ここではSQLのフィドルです。
行レベルのセキュリティ? –
そうですね。セッション変数を使用して、どのユーザーがログインしているかを確認し、ユーザーが割り当てられたレイヤー(レイヤーテーブルの行)のみにアクセスできるようにする必要があります。私は、usersテーブルにリストされているユーザーがレイヤーテーブルのすべてのレイヤー(行?)にアクセスするのを制限するいくつかのメソッドが必要だと思います。 – pavankguduru
https://www.postgresql.org/docs/current/static/ddl-rowsecurity.html –