Grails 应用程序中基于租户的唯一用户名

Tenant based unique username in grails application

我正在开发一个应用程序,它有几家公司作为我们的客户,每个公司下都有多个用户访问我们的应用程序。

所以我构建了 table 用户,将所有公司的用户保存在同一个 table 中,并将 company_id 作为一列-

class User {
    String username
    String password

    static belongsTo = [company:Company]

    static constraints = {
        username blank: false
        password blank: false
    }
}

在此应用程序中,我自定义了 spring 安全性以根据 3 个字段对用户进行身份验证 - usernamepasswordcomapany。所以如果在公司Org1和Org2中有两个用户ABC,他们将被正确识别。

现在,如果我在 username 上应用 unique: true 的约束,约束将应用于整个 table,并且它不允许我保存两个用户 ABC,无论他们是否在两家不同的公司。 (PS- 我理解约束是基于 table,请进一步阅读)。

现在的主要问题是我想让 username 基于公司而不是基于用户 table 是唯一的。怎么做?是否有预定义的约束可用于检查公司中是否存在用户名?或者每次注册的时候都要检查一下,如果这个用户名已经存在于一个公司?

您可以尝试使用多列约束(参见 http://www.grails.org/doc/latest/ref/Constraints/unique.html

您的用户名限制看起来像这样:

 username blank: false, unique: 'company'