我是grails的新手,我对限制查询结果有疑问:
域用户:
class User {
String login
String password
String fname
String lname
String role = "user"
static constraints = {
login (size:5..15, blank:false, unique:true, matches:"[a-zA-Z0-9]+")
password (size:5..15, blank:false)
fname (blank:false)
lname (blank:false)
role (inList:["user", "admin"])
}
String toString(){
fname & " " & lname
}
static mapping = {
cache true
columns {
fname type:'text'
lname type: 'text'
password type:'text'
login type:'text'
}
}
}
我的GSP页面片段,显示结果:
<g:each in="${userInstanceList}" status="i" var="userInstance">
<tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
<td><g:link action="show" id="${userInstance.id}">
${fieldValue(bean: userInstance, field: "id")}</g:link></td>
<td>${fieldValue(bean: userInstance, field: "login")}</td>
<td>****</td>
<td>${fieldValue(bean: userInstance, field: "fname")}</td>
<td>${fieldValue(bean: userInstance, field: "lname")}</td>
<td>${fieldValue(bean: userInstance, field: "role")}</td>
</tr>
</g:each>
我在单独的gsp View 中用以下代码调用 Controller :
<g:link class="users" controller="user" params="[sort:'fname',order:'desc']" action="">Manager Users</g:link>
我的问题是,如何根据以下条件调用域并显示结果:首先,如果角色是admin,则显示所有内容。如果该角色不是admin,则仅显示某些登录值的结果(即,仅显示登录名=当前用户的结果)
谢谢你的帮助!
杰森
最佳答案
定义您的users
Controller index
操作,例如:
def index = {
if (isAdmin()) {
[ userInstanceList: User.list(params) ]
} else {
[ userInstanceList: User.findAllByLogin(currentUser.login) ]
}
}
当然,您需要定义
isAdmin()
和currentUser
,但是这些取决于您的安全性实现。如果使用spring-security-core
插件,则可以使用:import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils
class UsersController {
def springSecurityService
def index = {
if (SpringSecurityUtils.ifAllGranted(['ROLE_ADMIN'])) {
[ userInstanceList: User.list(params) ]
} else {
[ userInstanceList: User.findAllByLogin(springSecurityService.currentUser.login) ]
}
}
// ...
}
有关更多信息,请参见helper classes插件文档中有关spring-security-core的部分。
关于grails - 如何使用条件限制域结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419567/