2017-09-16 8 views
0

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のフィドルです。

SQL Fiddle

+0

行レベルのセキュリティ? –

+0

そうですね。セッション変数を使用して、どのユーザーがログインしているかを確認し、ユーザーが割り当てられたレイヤー(レイヤーテーブルの行)のみにアクセスできるようにする必要があります。私は、usersテーブルにリストされているユーザーがレイヤーテーブルのすべてのレイヤー(行?)にアクセスするのを制限するいくつかのメソッドが必要だと思います。 – pavankguduru

+0

https://www.postgresql.org/docs/current/static/ddl-rowsecurity.html –

答えて

1

GeoServerはstandard security modelの一部としてper user layer accessを直接サポートしています。したがって、独自のソリューションを手渡すのではなく、テストされた提供されたメカニズムを使用する必要があります。これにより、ユーザー、グループ、および役割を使用してセキュリティを設定することができます。これは、ニーズに柔軟に対応する必要があります。

特にGeoServerは、既存のテーブルを使用するためにa JDBC authentication optionを提供します。

レイヤのリストを取得するには、ユーザーが参照できるレイヤーだけを含むgetCapabilitiesドキュメントを要求して解析する必要があります。

+0

ありがとう、私は提供されたリンクを通過しています。私はこれが助けるべきだと思う。それを試しても、私のアプリケーションにアクセスする各ユーザーに新しいGeoServerを作成する必要がありますか?または私のアプリケーションにログインするために使用するのと同じユーザー名とパスワードを許可する方法がありますか? – pavankguduru

+0

GeoServerは、既存のテーブルを使用するためのJDBC認証オプションを提供しています。http://docs.geoserver.org/stable/en/user/security/auth/providers.html#jdbc-authentication –

+0

これも回答に追加できますか?そして、これが私の問題を解決すると思います。 – pavankguduru

関連する問題