我是 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'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的 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>
Run Code Online (Sandbox Code Playgroud)
我在单独的 gsp 视图中使用以下代码调用控制器:
<g:link class="users" controller="user" params="[sort:'fname',order:'desc']" action="">Manager Users</g:link>
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何调用域并根据以下标准显示结果:首先,如果角色是管理员,则显示所有内容。如果角色不是admin,则只显示某个登录值的结果(即只显示登录=当前用户的结果)
感谢您的帮助!杰森
最好的、成熟的身份验证解决方案是 Gustavo 提出的 SpringSecurity 插件,但我假设您只需要一个简单的标准示例。在控制器中,您可以设置userInstanceList
如下:
def currentUser = User.get(1); // put your current user here
def c = User.createCriteria()
def userInstanceList = c.list {
or {
and {
ne("role","admin")
eq("login",currentUser.login)
}
eq("role", "admin")
}
maxResults(10)
order("login", "asc")
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6603 次 |
最近记录: |