2016-11-21 5 views
0

I Shiro Domain-Klassen wie unten haben:Proper Kriterien für Shiro Plugin in Grails

class ShiroUser { 
String email 
String password 

static hasMany = [ roles: ShiroRole, permissions: String ] 

static constraints = { 
    email(nullable: false, blank: false, unique: true) 
    } 
} 


class ShiroRole { 
String name 

static hasMany = [ users: ShiroUser, permissions: String ] 
static belongsTo = ShiroUser 

static constraints = { 
    name(nullable: false, blank: false, unique: true) 
    } 
} 

Ich erhielt ShiroUser die E-Mail von params.email. Und ich möchte die Berechtigung herausfinden, die ShiroUser mit Kriterien() gehört.

Ich versuchte den folgenden Code, konnte aber nicht erfolgreich sein.

def criteria= permissions.createCriteria().listDistinct { 
       ShiroRole{ 
        ShiroUser{ 
         eq("email", params.email) 
         } 
        } 
       } 

Antwort

0

Ihre Kriterien sind falsch aufgebaut. Ich würde es einfach halten und setzen wie:

def permissions = ShiroUser.findByEmail(params.email)?.roles*.permissions.flatten() as Set 

Wenn Sie mit den Kriterien halten wollen:

def permissions = ShiroRole.createCriteria().listDistinct { 
        projections{ 
         property 'permissions' 
        } 
        users{ 
         eq "email", params.email 
        } 
       } 
+0

Danke für die Info. Nur du hast gerade eine öffnende Klammer vor "E-Mail" in Kriterien verpasst. –

+0

Nein, habe ich nicht. Es ist groovy – injecteer

+0

Ich habe dies (http://docs.grails.org/latest/ref/Domain%20Classes/createCriteria.html) verwiesen, um Kriterien zu erstellen. Diese Klammer wurde in Gl. –

Verwandte Themen