lenve / vhr

微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。
http://vhr.javaboy.org
27.29k stars 10.29k forks source link

访问/employee/advanced/hello路径 #84

Closed accfcx closed 5 years ago

accfcx commented 5 years ago

如果menu[高级资料]可用,设置权限没有问题; 但是此菜单如果不可用,且有对应url注解和方法,那么应该也要做到错误提示:"没有此菜单", 这里直接调用了controller里的方法,我一直卡在这里,求帮忙。

我查看的动态权限设置,高级资料菜单不可用时,登陆后,postman调用,返回的角色信息是ROLE_LOGIN

accfcx commented 5 years ago

修复了问题: public Collection getAttributes(Object o) throws IllegalArgumentException { String requestUrl = ((FilterInvocation) o).getRequestUrl(); System.out.println("请求URL:"+requestUrl); List

menus = menuService.getAllMenu(); for (Menu menu: menus){ if (antPathMatcher.match(menu.getUrl(), requestUrl) && menu.getRoles().size() > 0){ List roles = menu.getRoles(); int size = roles.size(); String[] values = new String[size]; for (int i = 0; i< size; i++){ values[i] = roles.get(i).getName(); } return SecurityConfig.createList(values); } } if (HrUtil.getCurrentHr() != null){ throw new AccessDeniedException("权限不足"); } return SecurityConfig.createList("ROLE_LOGIN"); }

添加一行判断当前是否已经登录。如果登录,访问的路径没有找到任何角色,比如这里的高级资料,因为菜单enabled=0导致不可用,而最后返回的角色是"ROLE_LOGIN",这是不正确的,在返回之前抛出异常。