20190604
記錄一個(gè)簡(jiǎn)單方法解決一個(gè)看似很復(fù)雜的問題
本人在項(xiàng)目中遇到一個(gè)問題,就是一個(gè)用戶允許有多個(gè)角色,而角色和資源是多堆多關(guān)系,這就出現(xiàn)了一個(gè)情況就是,如果我選擇角色A,B,C,而A對(duì)應(yīng)的資源是{1,3,4,5}, B對(duì)應(yīng)的是{2,3,4}, C對(duì)應(yīng)的是{1,2,3,4},這樣就會(huì)出現(xiàn)如果我一個(gè)用戶有A,B,C三種角色,那么菜單就會(huì)出現(xiàn)下面這中情況,也就是,會(huì)出現(xiàn){1,1,2,2,3,3,3,4,4,4,5}

原先的思路是對(duì)于所有資源取集合,在后端做一個(gè)set,但是由于角色和資源是多對(duì)多,本身就有個(gè)中間表,如果你取資源的集合,那么如何管理其角色和資源那張表?,比如上面的情況,我取集合,那么對(duì)我用戶L,有角色A,B,C, 取集合是{1, 2, 3, 4, 5},那么這個(gè)資源對(duì)應(yīng)的是哪個(gè)角色,不知道,沒有這個(gè)角色,難道還要?jiǎng)?chuàng)建新的角色?這樣如果我刪掉A角色,那么就會(huì)變成{1,2,3,4},又要新建一個(gè)角色?
這樣下去需要判斷的復(fù)雜度就會(huì)越來越高。
沒有必要,我最后發(fā)現(xiàn)在SQL的語句中插入DISTINCT這樣就解決了,當(dāng)你在取菜單的時(shí)候,肯定會(huì)執(zhí)行SQL語句,那么對(duì)結(jié)果取DINSTINCT,那么出現(xiàn)的資源一定是沒有重復(fù)的,而且,我們不必去關(guān)心是哪個(gè)角色決定哪個(gè)資源,即便是角色A刪除了,也對(duì)結(jié)果沒有影響,一個(gè)單詞,解決了一個(gè)貌似復(fù)雜的問題,而且呢,避免其后續(xù)維護(hù)帶來的問題。
下面是結(jié)果:
