Я использую Spring Security Plugin .По умолчанию этот плагин создал три класса в моем проекте.
org.me.example.UserRole.UserRole
org.me.example.UserRole.User
org.me.example.UserRole.Role
Классы User
и Role
не знают друг друга, ноУ класса UserRole
есть и объект User
, и объект Role
.У объекта Role
есть только один атрибут, строка с именем authority
.
Моя цель - получить все Users
с определенным authority
в операторе <g:select>
.
Вот одна из моих попыток:
<g:select name="loggedBy.id" from="${org.me.example.UserRole.UserRole.list(fetch:[(role.authority):"ROLE_ADMIN"])}" optionKey="id" value="" />
Я понимаю, что это вернет список UserRole
, а не список User
.Можно ли как-то "присоединиться" к моим классам, чтобы я мог получить нужные данные?Ищите самое чистое решение.
Обновление:
Я думаю, что возникла путаница в том, как выглядят мои классы, поэтому вот урезанные версии.
class UserRole {
User user
Role role
//more stuff
}
class Role {
String authority
//more stuff
}
class User {
//lots of stuff, but nothing that links back to the Role class or the UserRole class
}
Ответ Крудофа сработал для меня после некоторых изменений.Crudof указал, что имя пакета UserRole
не соответствует соглашениям об именах пакетов Java.Это правда, но если я правильно помню, плагин Spring Security Core автоматически создает этот пакет и классы в нем, поэтому я не связывался с именем ... Но с тех пор, как я это сделал, прошло довольно много времени, поэтому я могошибитесь, автоматически назвав пакет.
<g:set var="desiredRole" value='${org.me.example.UserRole.Role.findByAuthority("ROLE_ADMIN")}' />
<g:select name="loggedBy.id" from="${org.me.example.UserRole.UserRole.findAllByRole(desiredRole).user}" optionKey="id" value="" />