Spring OAuth 2 + Spring 数据 Neo4j 多租户
Spring OAuth 2 + Spring Data Neo4j multi-tenancy
我将在我的 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 可以提出一些开箱即用的标准?
由于Neo4j目前还没有支持多租户的特性,如果你特别需要,必须按照你的方法解决。您的解决方案看起来很合理。
或者,许可是按机器进行的,因此可以使用,例如,Docker 并启动多个 Neo4j 实例,每个实例都在不同的端口上。
我将在我的 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 可以提出一些开箱即用的标准?
由于Neo4j目前还没有支持多租户的特性,如果你特别需要,必须按照你的方法解决。您的解决方案看起来很合理。
或者,许可是按机器进行的,因此可以使用,例如,Docker 并启动多个 Neo4j 实例,每个实例都在不同的端口上。