Grails 圣杯<;g:选择>;悲哀
我在用电脑。默认情况下,这个插件在我的项目中创建了三个类Grails 圣杯<;g:选择>;悲哀,grails,groovy,Grails,Groovy,我在用电脑。默认情况下,这个插件在我的项目中创建了三个类 org.me.example.UserRole.UserRole org.me.example.UserRole.User org.me.example.UserRole.Role User和Role类彼此不知道,但是UserRole类既有User又有Role对象。角色对象只有一个属性,一个名为权限的字符串 我的目标是在语句中获得具有特定权限的所有用户 以下是我的一个尝试: <g:select name="loggedBy.id"
org.me.example.UserRole.UserRole
org.me.example.UserRole.User
org.me.example.UserRole.Role
User
和Role
类彼此不知道,但是UserRole
类既有User
又有Role
对象。角色
对象只有一个属性,一个名为权限
的字符串
我的目标是在
语句中获得具有特定权限的所有用户
以下是我的一个尝试:
<g:select name="loggedBy.id" from="${org.me.example.UserRole.UserRole.list(fetch:[(role.authority):"ROLE_ADMIN"])}" optionKey="id" value="" />
经过一些修改后,克鲁多夫的回答对我起了作用。Crudof指出包名UserRole
不遵循Java包命名约定。这是真的,但如果我没记错的话,SpringSecurity核心插件会自动创建这个包和其中的类,所以我没有弄乱名称。。。但是我已经有一段时间没有这样做了,所以我可能会错误地认为它会自动命名包
<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="" />
最好在控制器中执行此操作:
def usersWithAdminRole = UserRole.withCriteria {
eq("role", Role.findByAuthority('ROLE_ADMIN'))
}.collect {
it.user
}
<g:select from="${usersWithAdminRole}" name="loggedBy.id" optionKey="id" />
def usersWithAdminRole=UserRole.withCriteria{
eq(“角色”,role.findByAuthority(“角色\管理”))
}.收集{
it.user
}
最好在控制器中执行此操作:
def usersWithAdminRole = UserRole.withCriteria {
eq("role", Role.findByAuthority('ROLE_ADMIN'))
}.collect {
it.user
}
<g:select from="${usersWithAdminRole}" name="loggedBy.id" optionKey="id" />
def usersWithAdminRole=UserRole.withCriteria{
eq(“角色”,role.findByAuthority(“角色\管理”))
}.收集{
it.user
}
您的包名不符合通用java标准:包名应该/必须以小写字符开头。否则人们会感到困惑,它可能是一个类(其中UserRole
是UserRole
的嵌套类)
基本上,您的代码片段很好(从概念上讲)。请注意,不能在双引号属性值中使用双引号!我想这已经阻止了你的进步。您可以尝试以下操作:
<g:set var="desiredRole"
value='${org.me.example.UserRole.findByAuthority("ROLE_ADMIN")}' />
<g:select name="userSelect"
from="${org.me.example.UserRole.findAllByRole(desiredRole).user}" />
请注意,从UserRole实例访问用户实例是一个groovy任务。有关一些示例,请参见
您的包名不符合通用java标准:包名应该/必须以小写字符开头。否则人们会感到困惑,它可能是一个类(其中UserRole
是UserRole
的嵌套类)
基本上,您的代码片段很好(从概念上讲)。请注意,不能在双引号属性值中使用双引号!我想这已经阻止了你的进步。您可以尝试以下操作:
<g:set var="desiredRole"
value='${org.me.example.UserRole.findByAuthority("ROLE_ADMIN")}' />
<g:select name="userSelect"
from="${org.me.example.UserRole.findAllByRole(desiredRole).user}" />
请注意,从UserRole实例访问用户实例是一个groovy任务。有关一些示例,请参见
thx,我是Grails的新手。我曾尝试过类似的方法,但从控制器到视图的过程中遇到了问题。你能详细介绍一下吗。假设我不想将此闭包仅限于ROLE\u ADMIN
,而是想使闭包usersWithUserRole
,然后传入一个参数。我知道闭包接受带有此符号的参数->
,但如何将该参数输入到
标记?将其从控制器获取到视图只需将其放入请求中即可。[usersWithAdminRole:usersWithAdminRole]。至于让它为任何角色工作,只需创建一个使用我向您展示的标准代码的新方法,并将您想要的任何角色传递给该方法即可。所以“ROLE_ADMIN”就变成了someRoleVar.thx,我是Grails的新手。我曾尝试过类似的方法,但从控制器到视图的过程中遇到了问题。你能详细介绍一下吗。假设我不想将此闭包仅限于ROLE\u ADMIN
,而是想使闭包usersWithUserRole
,然后传入一个参数。我知道闭包接受带有此符号的参数->
,但如何将该参数输入到
标记?将其从控制器获取到视图只需将其放入请求中即可。[usersWithAdminRole:usersWithAdminRole]。至于让它为任何角色工作,只需创建一个使用我向您展示的标准代码的新方法,并将您想要的任何角色传递给该方法即可。所以“ROLE_ADMIN”变成了someRoleVar。我确实了解包的命名约定,但当我安装Spring Security Core插件时,它会自动创建包和其中的类,所以我没有弄乱名称。起初,我对你的代码有一些问题,但经过一些修改后,我使它正常工作了。请参阅我的最新问题。谢谢你的帮助。还有一个问题,克鲁多夫,我怎么能做同样的事情,但有多个角色。例如,检索角色为role\u ADMIN
和/或role\u DRIVER
的所有用户?有多种解决方案。。但是,我认为现在应该将逻辑移到控制器中:def desiredRole1=UserRole.findByAuthority(“ROLE\u ADMIN”);def desiredRole2=UserRole.findByAuthority(“角色驱动程序”);def listedUsers=UserRole.withCriteria{role{“in”(“id“,[desiredRole1.id,desiredRole2.id])}.list().user;[listedUsers:listedUsers]
现在您可以在select的from属性中使用listedUsers
。我肯定遗漏了一些简单的内容,因为正如我在对@Gregg的评论中所说,我在从用户角色
控制器获取信息到视图时遇到了问题。您提供的代码没有错误,但我视图中的下拉框为空。不确定我在这方面做错了什么,但在我看来,当我使用findAllByRoleInList([desiredRole1,desiredRole2])
时,确实得到了预期的结果。。。但是如果像你和Gregg所说的那样把它放在控制器中,那就太好了。我确实意识到了包的命名约定,但是当我安装SpringSecurity核心插件时,它会自动创建包和clas
<g:set var="desiredRole"
value='${org.me.example.UserRole.findByAuthority("ROLE_ADMIN")}' />
<g:select name="userSelect"
from="${org.me.example.UserRole.findAllByRole(desiredRole).user}" />