20190604
记录一个简单方法解决一个看似很复杂的问题
本人在项目中遇到一个问题,就是一个用户允许有多个角色,而角色和资源是多堆多关系,这就出现了一个情况就是,如果我选择角色A,B,C,而A对应的资源是{1,3,4,5}, B对应的是{2,3,4}, C对应的是{1,2,3,4},这样就会出现如果我一个用户有A,B,C三种角色,那么菜单就会出现下面这中情况,也就是,会出现{1,1,2,2,3,3,3,4,4,4,5}
Jietu20190604-003349@2x.jpg原先的思路是对于所有资源取集合,在后端做一个set,但是由于角色和资源是多对多,本身就有个中间表,如果你取资源的集合,那么如何管理其角色和资源那张表?,比如上面的情况,我取集合,那么对我用户L,有角色A,B,C, 取集合是{1, 2, 3, 4, 5},那么这个资源对应的是哪个角色,不知道,没有这个角色,难道还要创建新的角色?这样如果我删掉A角色,那么就会变成{1,2,3,4},又要新建一个角色?
这样下去需要判断的复杂度就会越来越高。
没有必要,我最后发现在SQL的语句中插入DISTINCT这样就解决了,当你在取菜单的时候,肯定会执行SQL语句,那么对结果取DINSTINCT,那么出现的资源一定是没有重复的,而且,我们不必去关心是哪个角色决定哪个资源,即便是角色A删除了,也对结果没有影响,一个单词,解决了一个貌似复杂的问题,而且呢,避免其后续维护带来的问题。
下面是结果:
Jietu20190604-004749@2x.jpg
网友评论