我有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