2009-12-02 15 views
9

¿hay alguna forma bonita de verificar si algún usuario específico (no el que está conectado) tiene algún rol específico?Comprobando si un usuario específico tiene un rol

Aquí es ejemplo griales (generalmente el mismo para Java sencilla, pero la sintaxis):

def user = User.get(1) //Get user with id 1 
if (ifAnyGranted(user,"ROLE_ADMIN")) { //This is the line I need to implement somehow 
... 
} 

Gracias de antemano.

+2

que es un poco confuso lo que están pidiendo. ¿Estás buscando algo "más bonito" que el código anterior? ¿El fragmento que proporcionas funciona para ti? –

+0

Esa línea fue un ejemplo para mostrar precisamente lo que necesito. No hay función ifAnyGranted (usuario, roles). – bezmax

Respuesta

9

Asumo, su dominio de clase usuario mantiene una refernece hasMany a su clase de papel como éste:

class User { 
    static hasMany = [authorities: Role] 
    //.... 
} 
class Role { 
    static belongsTo = User 
    String description 
    String authority 
    //.... 
} 

lo que el código de función de comprobación es sencilla:

User user = User.get(1) 
if (user.authorities.any { it.authority == "ROLE_ADMIN" }) { 
    // user is a admin 
} 

Una respuesta actualizada puede ser encontrado here.

+1

Para utilizar esta técnica para comprobar el actual usuario conectado: usuario def authenticateService def pricipalInfo = authenticateService.principal() def = User.findByUsername (pricipalInfo.username) si (user.authorities.any {it. authority == "ROLE_ADMIN"}) { // el usuario es un administrador } –

3

Si estás usando el plugin Spring Security y desea comprobar el actual usuario registrado:

import org.codehaus.groovy.grails.plugins.springsecurity.AuthorizeTools 

. . . 

if (AuthorizeTools.ifAllGranted("ROLE_ADMIN")){ 
       //user is an admin 
} 
+0

Acabo de notar que la pregunta no era específicamente sobre el usuario que inició sesión. Espero que esto sea útil de todos modos. –

+1

Me doy cuenta de que esta es una respuesta antigua, pero parece que AuthorizeTools ha sido reemplazado por SpringSecurityTools – David

4
if (grails.plugin.springsecurity.SpringSecurityUtils.ifAllGranted("ROLE_ADMIN")) 
{ 
    ... 
} 
0

I caso de que quiera comprobar el actual usuario registrado, no es necesario para consultar el dominio del usuario, puesto que ya ha inyectado springSecurityService, por lo que podría haber acaba de escribir:

def springSecurityService 

def someAction(){ 
    if (principal.authorities.any { it.authority == 'ROLE_ADMIN'}){ 
     //... 
    } else { 
     //... 
    } 
} 
+0

¿No es esto lo mismo que la respuesta de Stefan? – bezmax

+0

@bezmax casi, mira de cerca, llamando User.get (1) no es necesario, probado con Grails 2.4.4. – bitsnaps

+0

Bueno, parte de la pregunta era 'si un usuario específico (no el que está conectado)'. – bezmax

Cuestiones relacionadas