干禁用管理员的 Grails 4 多租户

DRY disable of Grails 4 multi-tenancy for admins

我在 Grails 4 中使用基于鉴别器的多租户,从我使用 hibernate-filter 插件的 Grails 2 升级而来。在 Grails 2 中,我可以在管理员角色的 Grails 过滤器中禁用 hibernate-filter——因此不需要在我的应用程序中进行“if (admin)”检查。我可以以某种方式禁用 Grails 4 中的多租户并保持干燥吗?

根据 Jeffs 的评论,我改写我的问题以供将来参考:

只要请求可以被验证为来自具有管理员角色的客户端,就可以为整个请求完全禁用多租户吗?

我想我终于找到了解决办法。调试 Grails 我在 AbstractHibernateDatastore.java:

中找到了这个
Serializable currentId = Tenants.currentId(this);
if(ConnectionSource.DEFAULT.equals(currentId)) {
  disableMultiTenancyFilter();
}

当我想禁用多租户时(在当前用户是管理员的情况下),这让我想到了简单地 return ConnectionSource.DEFAULT 而不是来自我的租户解析器的租户 ID .

一个简单直接的解决方案,适用于 Grails 4.0.12。我会看看是否可以将其正式记录下来,因为我的管理用例对于多租户应用程序来说应该并不少见。