使用PostgreSQL限制用户对层的访问

使用PostgreSQL限制用户对层的访问,sql,postgresql,openlayers,geoserver,Sql,Postgresql,Openlayers,Geoserver,我正在从事一个WebGIS项目,其中包含许多使用GeoServer提供服务的层。通过OpenLayers 3使用WMS访问这些层 所有图层的列表存储在Postgres表中,如下所示 +----+-----------+------------+ | id | layername | layerowner | +----+-----------+------------+ | 1 | layer1 | user1 | | 2 | layer2 | user2 |

我正在从事一个WebGIS项目,其中包含许多使用GeoServer提供服务的层。通过OpenLayers 3使用WMS访问这些层

所有图层的列表存储在Postgres表中,如下所示

+----+-----------+------------+
| id | layername | layerowner |
+----+-----------+------------+
|  1 | layer1    | user1      |
|  2 | layer2    | user2      |
|  3 | layer3    | user3      |
+----+-----------+------------+ 
+----+----------+-----------+
| id | username | userlevel |
+----+----------+-----------+
|  1 | user1    | admin     |
|  2 | user2    | standard  |
|  3 | user3    | standard  |
+----+----------+-----------+
此列表很重要,因为加载层的javascript文件是使用该表生成的。(我不确定这样做是否合适)

我有另一个类似这样的用户表

+----+-----------+------------+
| id | layername | layerowner |
+----+-----------+------------+
|  1 | layer1    | user1      |
|  2 | layer2    | user2      |
|  3 | layer3    | user3      |
+----+-----------+------------+ 
+----+----------+-----------+
| id | username | userlevel |
+----+----------+-----------+
|  1 | user1    | admin     |
|  2 | user2    | standard  |
|  3 | user3    | standard  |
+----+----------+-----------+
我需要根据用户限制对层的访问。我最初考虑使用
userlevel
来限制对层的访问,但是具有相同用户级别的用户将可以访问该级别的所有层。但我需要一些东西,比如为特定用户提供对特定层的访问。默认情况下,管理员应该能够访问所有层,但
user1
只能访问授予他访问权限的层。我不知道该怎么做,也没办法。任何关于如何做到这一点的帮助或想法都将不胜感激

编辑:尝试为表中的每个用户添加一列,并设置一个布尔值以检查他是否具有访问权限。我想这不是一个合适的解决方案,因为我需要为每个用户提供一个专栏。下面是SQL小提琴


.

GeoServer直接支持作为其一部分的功能。因此,您应该使用提供的经过测试的机制,而不是手动滚动您自己的解决方案。这使您可以使用用户、组和角色设置安全性,这将为您的需求提供足够的灵活性

特别是GeoServer提供了使用现有表的功能


至于获取层列表,您应该请求并解析getCapabilities文档,该文档将只包括用户有权查看的层

行级安全?我想是的。我使用会话变量来检查哪个用户已登录,并且该用户应该只能访问分配给他的层(层表中的行?)。我想我需要一些方法来限制users表中列出的用户访问layers表中的所有层(行?)。我认为这应该有帮助。我将尝试,但我是否应该为访问我的应用程序的每个用户创建新的GeoServer?或者有没有办法允许他们使用相同的用户名和密码登录到我的应用程序?GeoServer提供了一个JDBC身份验证选项来使用您现有的表您可以在回答中添加这个吗?谢谢你,我想这解决了我的问题。