我正在尝试使用createCriteria()搜索具有特定角色的用户。我有三个域类:User,Role和UserRole(它们来自SpringSecurity)。
class UserRole implements Serializable {
User user
Role role
static constraints = {
user nullbale: false
role nullable: false
}
static mapping = {
version: false
id composite: ['role', 'user']
}
}
我在角色域上的用户域和权限字段上搜索isActive,名称或用户名字段。
def c = UserRole.createCriteria()
def results = c {
user {
eq("isActive", true)
or {
ilike("name", "somename")
ilike("username", "someusername")
}
}
role {
eq("authority", "ROLE_USER")
}
}
在运行此操作时,我从mongo插件获得UnsupportedOperationException。这是stacktrace
ERROR errors.GrailsExceptionResolver - UnsupportedOperationException occurred when processing request: [GET] /users/search - parameters:
query:
Join queries are not supported by MongoDB. Stacktrace follows:
Message: Join queries are not supported by MongoDB
Line | Method
->> 162 | handle in org.grails.datastore.mapping.mongo.query.MongoQuery$2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 142 | handle in ''
| 1091 | populateMongoQuery in org.grails.datastore.mapping.mongo.query.MongoQuery
| 993 | executeQuery in org.grails.datastore.mapping.mongo.query.MongoQuery$58
| 861 | doInDB . . . . . . in ''
| 833 | doInDB in ''
| 542 | list . . . . . . . in org.grails.datastore.mapping.query.Query
| 325 | invokeMethod in grails.gorm.CriteriaBuilder
| 17 | $tt__searchUsers . in com.themopi.apis.searchactivity.SearchService
| 29 | searchUser in com.themopi.apis.search.SearchController
| 198 | doFilter . . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 106 | processFilterChain in com.odobo.grails.plugin.springsecurity.rest.RestTokenValidationFilter
| 72 | doFilter in ''
| 53 | doFilter . . . . . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
| 1145 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 615 | run . . . . . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 745 | run in java.lang.Thread
我在这个问题上找到了Jira,但是没有解决。
到目前为止有任何解决方法,因为jira是在09年3月9日创建的,或者我错过了什么?
我将在此查询中使用分页和投影?
非常感谢任何帮助或指导。
提前致谢。
答案 0 :(得分:1)
在这个主题上有一个很好的article from Burt。
其中一个主要部分是,安全模型应该使用embedded/sub-doc entities
来实现。实际上,连接根本不应该与mongo
一起使用,如果需要,可以使用RDBMS或图形数据库。