2016-11-21 45 views
0

我有四郎域類如下:爲四郎插件正確的標準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) 
    } 
} 

我從params.email收到ShiroUser的電子郵件。我想使用criteria()來查找屬於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

感謝您的信息。只有您在標準中的「電子郵件」之前錯過了開頭括號。 –

+0

不,我沒有。這是groovy – injecteer

+0

我指的是(http://docs.grails.org/latest/ref/Domain%20Classes/createCriteria.html)來創建標準。方程中使用了括號。 –