Grails 中 Shiro 插件的正确标准

Proper Criteria for Shiro plugin in Grails

我有 Shiro 域 类 如下:

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() 找出 belongsTo ShiroUser 的权限。

我尝试了下面的代码,但是没有成功。

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

您的条件建立有误。我会保持简单并像这样:

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

如果您想坚持标准:

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