我将在我的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可以为此目的提出更加标准的东西吗?
答案 0 :(得分:1)
由于Neo4j目前没有支持多租户的功能,如果您特别需要它,它必须像您一样进行解决。你的解决方案看似合理
或者,许可是通过机器进行的,因此可以使用例如Docker并在不同的端口上分别启动多个Neo4j实例。