如何使用条件限制域结果

问题描述 投票:1回答:2

我是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视图中用此代码调用控制器:

<g:link class="users" controller="user" params="[sort:'fname',order:'desc']" action="">Manager Users</g:link>

我的问题是,如何根据以下条件调用域并显示结果:首先,如果角色是admin,则显示所有内容。如果该角色不是admin,则仅显示某些登录值的结果(即,仅在登录=当前用户的情况下显示结果)

感谢您的帮助!杰森

grails groovy
2个回答
0
投票
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的部分,以了解更多信息。

最佳和全面的身份验证解决方案是Gustavo建议的SpringSecurity插件,但我假设您只需要一个简单的标准示例。在控制器中,您可以将userInstanceList设置如下:

4
投票
© www.soinside.com 2019 - 2024. All rights reserved.