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 个字段对用户进行身份验证 - username
、password
和 comapany
。所以如果在公司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'
我正在开发一个应用程序,它有几家公司作为我们的客户,每个公司下都有多个用户访问我们的应用程序。
所以我构建了 table 用户,将所有公司的用户保存在同一个 table 中,并将 company_id 作为一列-
class User {
String username
String password
static belongsTo = [company:Company]
static constraints = {
username blank: false
password blank: false
}
}
在此应用程序中,我自定义了 spring 安全性以根据 3 个字段对用户进行身份验证 - username
、password
和 comapany
。所以如果在公司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'