Как ограничить результаты домена с критериями - PullRequest
1 голос
/ 21 июня 2011

Я новичок в 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>

Iвызовите контроллер с этим кодом в отдельном представлении gsp:

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

У меня вопрос, как мне вызвать домен и отобразить результаты в соответствии со следующими критериями: во-первых, если роль - администратор, отобразитьвсе.Если роль не является администратором, отображаются только результаты определенного значения для входа в систему (т. Е. Просто отображаются результаты, где имя для входа = текущий пользователь)

Спасибо за помощь!Ясон

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Лучшим и полноценным решением для аутентификации является плагин 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")
}

Подробную информацию о критериях можно найти здесь .

0 голосов
/ 21 июня 2011

Определите действие users контроллера 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) ]
        }
    }

    // ...

}

См. Раздел о вспомогательных классах в документации к плагину spring-security-core для получения дополнительной информации..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...