Frage

gibt es eine hübsche Weise, zu überprüfen, ob ein bestimmte Benutzer (nicht derjenige, der angemeldet ist) eine bestimmte Rolle hat?

Hier ist Grails Beispiel (in der Regel das gleiche für Ebene Java aber Syntax):

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

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Ich gehe davon aus, Ihre Benutzer-Domain-Klasse hält eine hasMany refernece auf Ihre Rolle Klasse wie folgt:

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

So Ihr Code für Rollenprüfung ist einfach:

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

Eine aktualisierte Antwort kann hier .

Andere Tipps

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

Wenn Sie das Spring Security Plugin verwenden und wollen den aktuellen angemeldeten Benutzers überprüfen:

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

. . .

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

I Fall, dass Sie den aktuellen angemeldeten Benutzer überprüfen möchten, brauchen Sie keine Benutzerdomäne abgefragt werden, da Sie bereits springSecurityService injiziert haben, so konnten Sie n nur schreiben:

def springSecurityService

def someAction(){
    if (principal.authorities.any { it.authority == 'ROLE_ADMIN'}){
        //...
    } else {
        //...
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top