Commit 161cadd9 authored by fangzhipeng's avatar fangzhipeng

修复根管理员权限bug

parent 3730d816
...@@ -76,6 +76,12 @@ ...@@ -76,6 +76,12 @@
<artifactId>pagehelper-spring-boot-starter</artifactId> <artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.0</version> <version>1.2.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.bigsys.auth.project.controller; package com.bigsys.auth.project.controller;
import com.bigsys.auth.project.model.Menu; import com.bigsys.auth.project.db.model.User;
import com.bigsys.auth.project.service.RoleMenuService;
import com.bigsys.auth.project.service.RoleService;
import com.bigsys.auth.project.service.UserRoleService;
import com.bigsys.auth.project.service.WrapperRole;
import com.bigsys.auth.project.util.response.BSResponse; import com.bigsys.auth.project.util.response.BSResponse;
import com.fasterxml.jackson.databind.JavaType; import com.google.common.collect.Lists;
import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.shiro.SecurityUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.io.IOException; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -15,17 +19,19 @@ import java.util.List; ...@@ -15,17 +19,19 @@ import java.util.List;
@RequestMapping(value = "/menu") @RequestMapping(value = "/menu")
public class MenuController { public class MenuController {
String menu = "[{\"name\":\"aa\",\"hasSub\":true,\"menus\":[{\"name\":\"bb\",\"link\":\"/index\",\"hasSub\":false}]},{\"name\":\"aa\",\"link\":\"/\",\"hasSub\":false},{\"name\":\"aa\",\"link\":\"/\",\"hasSub\":false},{\"name\":\"系统管理\",\"link\":\"/\",\"hasSub\":true,\"menus\":[{\"name\":\"角色管理\",\"link\":\"/role/index\",\"hasSub\":false},{\"name\":\"权限管理\",\"link\":\"/auth/index\",\"hasSub\":false},{\"name\":\"用户管理\",\"link\":\"/user/index\",\"hasSub\":false},{\"name\":\"菜单管理\",\"link\":\"/user/index\",\"hasSub\":false}]}]"; @Resource
private RoleMenuService roleMenuService;
@Resource
private UserRoleService userRoleService;
@RequestMapping(value = "/getMenus") @RequestMapping(value = "/getMenus")
public BSResponse getMenus(String userId) { public BSResponse getMenus() {
JavaType javaType = new ObjectMapper().getTypeFactory().constructParametricType(ArrayList.class, Menu.class); User curUser = (User) SecurityUtils.getSubject().getPrincipal();
List<Menu> menus = null; userRoleService.wrapperRoles(Lists.newArrayList(curUser));
try { if (curUser.getRoleIds().contains("admin")) {
menus = new ObjectMapper().readValue(menu, javaType); return BSResponse.ok("all");
} catch (IOException e) {
e.printStackTrace();
} }
List<String> menus = roleMenuService.getRoleMenus(curUser.getRoleIds());
return BSResponse.ok(menus); return BSResponse.ok(menus);
} }
......
...@@ -11,4 +11,6 @@ public interface RoleMenuService extends BaseService<Integer, RoleMenu, RoleMenu ...@@ -11,4 +11,6 @@ public interface RoleMenuService extends BaseService<Integer, RoleMenu, RoleMenu
void addRoleMenus(RoleMenus roleMenus); void addRoleMenus(RoleMenus roleMenus);
List<String> getRoleMenus(String role); List<String> getRoleMenus(String role);
List<String> getRoleMenus(List<String> roleIds);
} }
...@@ -51,4 +51,14 @@ public class RoleMenuServiceImpl extends BaseServiceImpl<Integer, RoleMenu, Role ...@@ -51,4 +51,14 @@ public class RoleMenuServiceImpl extends BaseServiceImpl<Integer, RoleMenu, Role
.collect(Collectors.toList()); .collect(Collectors.toList());
return menus; return menus;
} }
@Override
public List<String> getRoleMenus(List<String> roleIds) {
List<RoleMenu> roleMenus = selectByExample((a, b) -> {
b.andRoleIn(roleIds);
});
return roleMenus.stream()
.map(roleMenu -> roleMenu.getMenu())
.distinct().collect(Collectors.toList());
}
} }
export default [ export default [
{ {
name: 'aa', name: '测试菜单',
hasSub: true, link: '/test',
menus: [ hasSub: false
{
name: 'bb',
link: '/index',
hasSub: false,
menus: []
}
]
},
{
name: 'aa',
link: '/',
hasSub: false,
menus: []
},
{
name: 'aa',
link: '/',
hasSub: false,
menus: []
}, },
{ {
name: '系统管理', name: '系统管理',
......
...@@ -21,6 +21,14 @@ import error404 from '../views/pages/404' ...@@ -21,6 +21,14 @@ import error404 from '../views/pages/404'
**/ **/
export const constantRouterMap = [ export const constantRouterMap = [
{ {
path: '/',
component: Layout,
redirect: '/404',
name: '测试页面',
children: [
{path: 'test', component: user, name: '主页2'}
]
}, {
path: '/sys', path: '/sys',
component: Layout, component: Layout,
redirect: '/404', redirect: '/404',
......
...@@ -21,13 +21,50 @@ ...@@ -21,13 +21,50 @@
<script> <script>
import SidebarItem from './SidebarItem' import SidebarItem from './SidebarItem'
import { mapGetters } from 'vuex' import axios from 'axios'
import menus from '../../mock/menus'
var id = 10000
export default { export default {
components: { components: {
SidebarItem SidebarItem
}, },
created () { created () {
this.$store.dispatch('GET_MENUS') this.$store.dispatch('GET_MENUS')
axios.get('/api/menu/getMenus').then((response) => {
if (response.data.data === 'all') {
this.menus = menus
} else {
var hit = (resmenu, link) => {
for (let i = 0; i < resmenu.length; i++) {
if (link === resmenu[i]) {
return true
}
}
return false
}
var solveMenu = (copymenu, menus, resmenu) => {
menus.forEach((menu) => {
var newmenu = {}
newmenu.id = id++
newmenu.link = menu.link
newmenu.name = menu.name
newmenu.hasSub = menu.hasSub
if (!menu.hasSub && hit(resmenu, menu.link)) {
copymenu.push(newmenu)
} else if (menu.hasSub) {
newmenu.menus = []
solveMenu(newmenu.menus, menu.menus, resmenu)
if (newmenu.menus.length > 0) {
copymenu.push(newmenu)
}
}
})
}
var copymenu = []
solveMenu(copymenu, menus, response.data.data)
this.menus = copymenu
}
})
}, },
methods: { methods: {
handleOpen (key, keyPath) { handleOpen (key, keyPath) {
...@@ -35,10 +72,15 @@ ...@@ -35,10 +72,15 @@
}, },
handleClose (key, keyPath) { handleClose (key, keyPath) {
console.log(key, keyPath) console.log(key, keyPath)
},
filter (resMenus, menus) {
} }
}, },
computed: { data () {
...mapGetters(['menus']) return {
menus: menus
}
} }
} }
</script> </script>
...@@ -94,6 +94,7 @@ ...@@ -94,6 +94,7 @@
} }
}) })
} }
addId(menus)
}, },
methods: { methods: {
getCheckedNodes () { getCheckedNodes () {
...@@ -157,11 +158,6 @@ ...@@ -157,11 +158,6 @@
return return
} }
that.curData = data that.curData = data
if (data.parentId === 'admin') {
that.data3 = menus
that.dialogVisible = true
return
}
var roleMenus = axios.get('/api/role/getRoleMenus?role=' + data.parentId) var roleMenus = axios.get('/api/role/getRoleMenus?role=' + data.parentId)
var authedMenus = axios.get('/api/role/getRoleMenus?role=' + data.id) var authedMenus = axios.get('/api/role/getRoleMenus?role=' + data.id)
axios.all([roleMenus, authedMenus]).then((response) => { axios.all([roleMenus, authedMenus]).then((response) => {
...@@ -193,7 +189,6 @@ ...@@ -193,7 +189,6 @@
} }
var solveCheckedMenu = (copymenu, ids, checkedMenu) => { var solveCheckedMenu = (copymenu, ids, checkedMenu) => {
console.log(copymenu)
copymenu.forEach((menu) => { copymenu.forEach((menu) => {
if (!menu.hasSub && hit(checkedMenu, menu.link)) { if (!menu.hasSub && hit(checkedMenu, menu.link)) {
ids.push(menu.id) ids.push(menu.id)
...@@ -203,12 +198,13 @@ ...@@ -203,12 +198,13 @@
}) })
} }
var resmenu = response[0].data.data var resmenu = response[0].data.data
if (data.parentId === 'admin') {
resmenu = menus
}
var copymenu = [] var copymenu = []
solveMenu(copymenu, menus, resmenu) solveMenu(copymenu, menus, resmenu)
that.data3 = copymenu that.data3 = copymenu
if (data.parentId === 'admin') {
that.data3 = menus
copymenu = menus
}
var ids = [] var ids = []
var checkedMenu = response[1].data.data var checkedMenu = response[1].data.data
solveCheckedMenu(copymenu, ids, checkedMenu) solveCheckedMenu(copymenu, ids, checkedMenu)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment