Spring OAuth 2 + Spring Data Neo4j多租户

时间:2016-10-24 08:22:32

标签: spring spring-security multi-tenant oauth2 spring-data-neo4j-4

我将在我的Spring OAuth 2 + Spring Data Neo4j项目中实现多租户支持。

我已将OAuth2授权服务器配置为具有不同clientId的几个不同客户端。

另外,我在Spring Data Neo4j模型中添加了一个基础TenantEntity

@NodeEntity
public abstract class TenantEntity extends BaseEntity {

    private String tenantId;

    public String getTenantId() {
        return tenantId;
    }

    public void setTenantId(String tenantId) {
        this.tenantId = tenantId;
    }

}

我现有的所有Spring Data Neo4j实体现在必须扩展此TenantEntity

现在我要重写我的所有Neo4j查询,以支持此tenantId参数。

例如当前查询:

MATCH (d:Decision)<-[:DEFINED_BY]-(c:Criterion) WHERE id(d) = {decisionId} AND NOT (c)<-[:CONTAINS]-(:CriterionGroup) RETURN c

我将重写为以下内容:

MATCH (d:Decision)<-[:DEFINED_BY]-(c:Criterion) WHERE id(d) = {decisionId} AND d.tenantId = {tenantId} AND c.tenantId = {tenantId} AND NOT (c)<-[:CONTAINS]-(:CriterionGroup) RETURN c

反过来tenantId我将使用OAuth2 clientId并将其与每个Neo4j实体一起存储。

为了实现多租户或Spring OAuth2 / Data,它是一种正确的方法吗?Neo4j可以为此目的提出更加标准的东西吗?

1 个答案:

答案 0 :(得分:1)

由于Neo4j目前没有支持多租户的功能,如果您特别需要它,它必须像您一样进行解决。你的解决方案看似合理

或者,许可是通过机器进行的,因此可以使用例如Docker并在不同的端口上分别启动多个Neo4j实例。