2016-11-21 9 views
0

У меня есть классы домена Shiro, как показано ниже:Собственные критерии Shiro плагин в 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) 
    } 
} 

я получил электронную почту ShiroUser от params.email. И я хочу узнать разрешение, которое принадлежит ShiroUser, используя критерии().

Я пробовал приведенный ниже код, но не смог добиться успеха.

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

ответ

0

Ваши критерии ошибочно построены. Я бы сохранить его простым и поставить как:

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

Если вы хотите придерживаться критериев:

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

Спасибо за информацию. Только вы просто пропустили открывающую скобку до «email» в критериях. –

+0

Нет, я этого не делал. Это groovy – injecteer

+0

Я ссылался на это (http://docs.grails.org/latest/ref/Domain%20Classes/createCriteria.html) для создания критериев. В экв. –