2012-06-27 58 views
1

我想檢查是否有任何可以正常登錄的用戶角色在特定的角色列表中。但它可以是任何兩個集合。Grails集合

基本上,我想檢查的任何memeber [X1,X3,X4]集合包含在[X2,X3,X7]

如何做到這一點在Groovy(Grails的)?

+1

你在你的應用程序中使用了什麼安全插件?我問,因爲可能有更好的方法來實現你的目標,例如在spring-security-core中使用'SpringSecurityUtils.ifAnyGranted'(如果你使用的是一個重疊檢查,它應該考慮角色層次結構) 「T)。 –

+0

@IanRoberts我正在使用Spring Security,我絕對可以使用這個。謝謝! – drago

回答

1

將其中一個列表轉換爲一個集合,並使用retainAll方法找到交集。

def s1 = [x1,x3,x4] as Set 
s1.retainAll([x2,x3,xy]).size() > 0 
0
boolean check(Collection c1, Collection c2) { 
    for(def i in c1) { 
     if(c2.contains(i)) { 
      return true 
      break 
     } 
    } 
    return false 
} 
+0

我想這會工作,但不是很groovy。但是,謝謝。 – drago

4

可以使用Collection#disjoint方法:

def a = [5, 4, 3] 
def b = [7, 6, 5] 

// a contains a member of b if they are not disjoint. 
assert !a.disjoint(b) 
assert a.disjoint([8, 7, 6]) 

其他的選擇是!a.intersect(b).emptya.any { it in b }但我認爲disjoint解決方案是最直接的一個(野生這裏炒)可能是最因爲它不需要中間收集或關閉(更新:嗯,the code for disjoint顯示它在一些引擎蓋下做了一些時髦的東西......但是幾乎所有的Groovy方法ods do = P)。

0
def a = [1,2,3] 
    def b = [3,4,5] 
    def result = false 
    a.each{it-> 
     if(b.contains(it)) 
     result =true 
    } 
    return result 
+0

Hiya,這可能很好的解決了這個問題......但是如果你能夠提供一些關於它是如何工作和爲什麼工作的一些解釋的話,那將是很好的:)不要忘記 - Stack堆棧中有一堆新手,他們可以從你的專業知識中學到一兩件事 - 對你來說顯而易見的事情對他們來說可能並非如此。 –

+0

我很抱歉沒有添加任何解釋。但我認爲代碼很容易理解。 –

+0

我確定它適合你和我......但就在前幾天,我幫助Stack Overflow的一個人在5年級......這樣的人在Stack Overflow上受到歡迎 - 我們想確保他們覺得很受歡迎,並有很多東西可以學習。你可以只添加一個解釋句子來說:你改變了什麼,以及爲什麼改變使代碼工作。 –