我有2个域对象,用户和SystemRights(这是一个多对多的,所以1个用户可以有很多权利,1个权利可以为许多用户所有)。我正在寻找一种简单的方法来检查用户是否具有所需的权限。Grails:GORM:遍历多对多关系
用户域
class User {
static hasMany = [systemRights: SystemRight, enterpriseUsers: EnterpriseUser]
String email;
String passwordHash;
}
SystemRight域
class SystemRight {
public static final String LOGIN = "LOGIN"
public static final String MODIFY_ALL_ENTERPRISES = "MODIFY_ALL_ENTERPRISES"
public static final String ADMINISTER_SYSTEM = "ADMINISTER_SYSTEM"
public static final String VALIDATE_SUPPLIER_SCORECARDS = "VALIDATE_SUPPLIER_SCORECARDS"
static hasMany = [users:User]
static belongsTo = User
String name
}
下并没有为我工作:
在User.class
public boolean hasRights(List<String> requiredRights) {
def userHasRight = SystemRight.findByUserAndSystemRight (this, SystemRight.findByName(requiredRight));
// Nor this
def userHasRight = this.systemRights.contains(SystemRight.findByName(requiredRight));
}
当前可怕的解决方案
public boolean hasRights(List<String> requiredRights) {
for (String requiredRight : requiredRights) {
def has = false
for (SystemRight userRight : user.systemRights) {
if (userRight.name == requiredRight) {
has = true
break;
}
}
if (has == false) {
return false;
}
}
return true
}
您好格雷格,感谢您的回答。你是否建议失去多对多的关系?由于这些限制,我在User和Enterprise和UserEnterprise上做了这些工作。如果这是你的建议,那么我想我会杀死我项目中的所有m2m关系。 – Spider
它仍然是m2m,你只是自己管理连接表。 – Gregg
完成!没有更多的麻烦! – Spider