Pregunta

¿hay alguna manera bonita de comprobar si un usuario específico (no el que ha iniciado la sesión) tiene algún papel específico?

Aquí es Grails ejemplo (generalmente el mismo para Java simple pero 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.

¿Fue útil?

Solución

Asumo, su dominio de clase de usuario tiene un refernece hasMany a su clase de papel como éste:

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

Así 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 se puede encontrar aquí .

Otros consejos

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

Si estás usando el plugin Spring Security y que desee comprobar la corriente usuario conectado:

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

. . .

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

Me 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 {
        //...
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top