Я новичок в grails, и я пытаюсь реализовать пружинное ядро безопасности и многопользовательский одноплатный плагин db. Я реализовал первое ядро безопасности весной и внедрил пользовательский AuthenticationProvider и Authentication. Затем я установил многопользовательский одиночный плагин db и запустил скрипт «mt-spring-security», который автоматически создавал пользовательские tenantResolver и tenantRepository. Для тестирования я жестко закодировал tenantId в tenantResolver. Я добавил аннотацию @MultiTenant в классы домена.Grails 2.2.3 + Весовое ядро безопасности + Multi-tenant Single DB plugin
@MultiTenant
класс реализует Serializable-Клиент {
long idclient_user
Userprofile user
Client client
int tenantId
...
}
В AuthenticationProvider, данные не-Клиент фильтруется для текущего арендатора. Он приносит данные всем арендаторам.
класс ClientAuthenticationProvider реализует AuthenticationProvider {
Authentication authenticate(Authentication auth) throws AuthenticationException {
ClientAuthentication authentication = auth
String password = authentication.credentials
String username = authentication.name
String clientName = authentication.clientName
...
Userprofile.withTransaction { status ->
def user = Userprofile.findWhere(username: username)
def client = Client.findWhere(clientname: clientName)
def clientUser = ClientUser.findWhere(client: client, user: user) <-- NOT FILTERED FOR THE CURRENT TENANT. I HARD-CODED INVALID TENANTID IN THE TENANTRESOLVER AND EXPECTING IT TO FAIL BUT IT STILL FINDS THE USER.
if (!clientUser) {
throw new UsernameNotFoundException('User not found', username)
}
...
}
...
result
}
Я не знаю, как многопользовательские и весна безопасность работают вместе. Мне трудно понять Архитектуру/дизайн.
Если бы кто-нибудь мог предоставить мне пример реализации или указать мне в правильном направлении, это будет действительно полезно. Спасибо, dinesh