grails - 如何使用条件限制域结果

标签 grails groovy

我是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/

相关文章:

grails - 遵循 Grails 3 中的符号链接(symbolic link)

jsp - 如何在Grails应用程序中导入ckeditor/jsp taglibs

java - 如何在java中获取groovy脚本的输出

groovy - 为什么提取这个方法在gradle中不起作用?

groovy - Grails:如何使我创建的所有内容都大写?

grails webflow - 将非序列化模型传递给 View

grails - grails自定义标签将html标签作为字符串文字

grails - 解析 Grails 插件的快照版本(使用 maven-publisher 插件部署)

grails - 如何在grails中将ilike与Integer一起使用

jenkins - 为什么在 Jenkinsfile 的 DSL 闭包中使用 `this` 或 `env` 时需要关键字 `param`