2011-07-31 13 views

Respuesta

7

Quizás dividirlo en dos expresiones ayudaría. params.max ? params.int('max') : 10 es la expresión ternaria ... cuyo resultado termina siendo el primer argumento en Math.min (siendo 100 el otro arg).

Parece que el resultado final es un número entero que se limita a ser, como máximo, 100, y por defecto a 10.

+0

Oh, claro, lo tengo. Perdí eso de alguna manera. Gracias – Ray

14

¿Está claro ahora?

def max = params.max? params.int('max') : 10 
Math.min(max, 100) 

Por cierto este es un buen lenguaje popular en Grails - si el parámetro existe max, leerlo, pero si excede el valor dado (100 por defecto), truncadas a 100. De esta forma, un atacante o usuario maligno no hará que su aplicación devuelva una gran cantidad arbitraria de datos de la base de datos.

+0

Veo, gracias por aclarar el valor de limitar esto para los atacantes del sitio. – Ray

0

Al proteger contra un ataque, es posible que desee mirar también los límites inferiores. Acabo de encontrar esto en Grails 2.4.4: Cualquier cosa menos que 1 parece devolver todos los registros. No está documentado, y la fuente parece verificar valores> -1, pero encontré que tenía que verificar los valores> 0:

//Use value, if found, else 20 
int max = params.getInt('max') ?: 20 

//no less than 1, no more than 100: max < 1 returns ALL records (grails 2.4.4) 
max = Math.max(max, 1) 
max = Math.min(max, 100) 

Domain.list(max: max)