2016-11-21 2 views
0

J'ai des classes de domaine Shiro comme ci-dessous:Critères appropriés pour le plugin Shiro dans 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) 
    } 
} 

J'ai reçu l'e-mail de ShiroUser de params.email. Et je veux trouver la permission qui appartient à ShiroUser using des critères().

J'ai essayé le code ci-dessous, mais je n'ai pas réussi.

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

Répondre

0

Vos critères sont mal construits. Je le garde simple et mis comme:

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

Si vous voulez coller avec vos critères:

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

Merci pour l'info. Seulement vous avez juste manqué une parenthèse ouvrante avant "email" dans les critères. –

+0

Non, je ne l'ai pas fait. C'est groovy – injecteer

+0

Je me référais à ceci (http://docs.grails.org/latest/ref/Domain%20Classes/createCriteria.html) pour créer des critères. La parenthèse a été utilisée dans l'éq. –