diff --git a/src/main/java/com/zsc/edu/gateway/framework/security/CustomAuthenticationSuccessHandler.java b/src/main/java/com/zsc/edu/gateway/framework/security/CustomAuthenticationSuccessHandler.java index fb832ea..94b22d7 100644 --- a/src/main/java/com/zsc/edu/gateway/framework/security/CustomAuthenticationSuccessHandler.java +++ b/src/main/java/com/zsc/edu/gateway/framework/security/CustomAuthenticationSuccessHandler.java @@ -24,7 +24,7 @@ public class CustomAuthenticationSuccessHandler implements AuthenticationSuccess @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { // response.sendRedirect("/api/rest/user/me"); -// request.getRequestDispatcher("/api/rest/user/me").forward(request, response); + request.getRequestDispatcher("/api/rest/user/me").forward(request, response); // Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); // String sessionId = request.getRequestedSessionId(); // String remoteAddr = request.getRemoteAddr(); diff --git a/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java b/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java index 588b9e2..3bbf5ad 100644 --- a/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java +++ b/src/main/java/com/zsc/edu/gateway/framework/security/SpringSecurityConfig.java @@ -84,8 +84,9 @@ public class SpringSecurityConfig { return http .authorizeHttpRequests(auth -> auth - .requestMatchers(HttpMethod.GET, "/api/rest/user/me","/api/rest/user/menu","/api/rest/user/register","/api/rest/user/send-email").permitAll() + .requestMatchers(HttpMethod.GET, "/api/rest/user/menu","/api/rest/user/register","/api/rest/user/send-email").permitAll() .requestMatchers(HttpMethod.POST, "/api/rest/user/login","/api/rest/user/register").permitAll() + .requestMatchers("/api/rest/user/me").permitAll() .requestMatchers("/api/**").authenticated() ) // 不用注解,直接通过判断路径实现动态访问权限 diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java index e899870..b13be6a 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/controller/UserController.java @@ -1,5 +1,6 @@ package com.zsc.edu.gateway.modules.system.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zsc.edu.gateway.framework.security.UserDetailsImpl; @@ -8,6 +9,7 @@ import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdateDto; import com.zsc.edu.gateway.modules.system.dto.UserSelfUpdatePasswordDto; import com.zsc.edu.gateway.modules.system.dto.UserUpdateDto; import com.zsc.edu.gateway.modules.system.entity.Authority; +import com.zsc.edu.gateway.modules.system.entity.Menu; import com.zsc.edu.gateway.modules.system.entity.Role; import com.zsc.edu.gateway.modules.system.entity.User; import com.zsc.edu.gateway.modules.system.query.UserQuery; @@ -37,7 +39,6 @@ public class UserController { private final RoleService roleService; private final DeptService deptService; - private final RoleAuthService roleAuthService; private final AuthorityService authorityService; private final MenuService menuService; @@ -49,7 +50,7 @@ public class UserController { * @param csrfToken csrf令牌 * @return 包含csrf令牌和登录用户的认证主体信息 */ - @GetMapping("me") + @RequestMapping(value = "me", method = {RequestMethod.POST, RequestMethod.GET}) public Map me(@AuthenticationPrincipal Object principal, CsrfToken csrfToken) { Map map = new LinkedHashMap<>(); map.put("user", principal); @@ -193,8 +194,8 @@ public class UserController { * 根据ID查询用户 * */ @GetMapping("/menu") - public List menu() { - List list = menuService.list().stream().map(MenuVo::new).toList(); + public List menu(@AuthenticationPrincipal UserDetailsImpl userDetails) { + List list = menuService.selectByUserId(userDetails.getId(), Menu.Type.PAGE).stream().map(MenuVo::new).toList(); return TreeUtil.makeTree( list, x -> x.getPid() == null, diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java b/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java index 3519c81..76ad607 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/entity/Menu.java @@ -12,13 +12,12 @@ import lombok.*; @Getter @Setter @NoArgsConstructor -@AllArgsConstructor() +@AllArgsConstructor @EqualsAndHashCode(callSuper = false) @TableName("sys_menu") public class Menu extends BaseEntity { private Long pid; - private Type type; private String name; private String path; @@ -34,12 +33,10 @@ public class Menu extends BaseEntity { @AllArgsConstructor public enum Type { PAGE(1, "页面"), - BUTTON(2, "按钮"); - + OPERATION(2, "操作"); @EnumValue private final Integer code; private final String desc; - } } diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/repo/MenuRepository.java b/src/main/java/com/zsc/edu/gateway/modules/system/repo/MenuRepository.java index 9dc94f1..6ceac1e 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/repo/MenuRepository.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/repo/MenuRepository.java @@ -1,12 +1,19 @@ package com.zsc.edu.gateway.modules.system.repo; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import com.zsc.edu.gateway.modules.system.entity.Menu; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author yao */ public interface MenuRepository extends BaseMapper { + List selectByRoleId(Long roleId); + List selectByUserId(Long userId, Menu.Type type); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/service/MenuService.java b/src/main/java/com/zsc/edu/gateway/modules/system/service/MenuService.java index b6d7cde..71872a4 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/service/MenuService.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/service/MenuService.java @@ -3,8 +3,14 @@ package com.zsc.edu.gateway.modules.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.zsc.edu.gateway.modules.system.entity.Menu; +import java.util.List; + /** * @author zhuang */ public interface MenuService extends IService { + + List selectByRoleId(Long roleId); + + List selectByUserId(Long userId, Menu.Type type); } diff --git a/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImpl.java b/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImpl.java index 18c2def..da896cb 100644 --- a/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImpl.java +++ b/src/main/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImpl.java @@ -7,10 +7,21 @@ import com.zsc.edu.gateway.modules.system.service.MenuService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + /** * @author zhuang */ @AllArgsConstructor @Service public class MenuServiceImpl extends ServiceImpl implements MenuService { + @Override + public List selectByRoleId(Long roleId) { + return baseMapper.selectByRoleId(roleId); + } + + @Override + public List selectByUserId(Long userId, Menu.Type type) { + return baseMapper.selectByUserId(userId, type); + } } diff --git a/src/main/resources/mappers/MenuMapper.xml b/src/main/resources/mappers/MenuMapper.xml index 18833c1..32befa0 100644 --- a/src/main/resources/mappers/MenuMapper.xml +++ b/src/main/resources/mappers/MenuMapper.xml @@ -1,4 +1,12 @@ + + + diff --git a/src/test/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImplTest.java b/src/test/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImplTest.java index cceab00..800ee70 100644 --- a/src/test/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImplTest.java +++ b/src/test/java/com/zsc/edu/gateway/modules/system/service/impl/MenuServiceImplTest.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.List; +import static org.junit.jupiter.api.Assertions.*; @SpringBootTest class MenuServiceImplTest { @@ -33,38 +34,43 @@ class MenuServiceImplTest { menuService.saveBatch(List.of(dashboard, system, user, message)); Menu workplace = new Menu(dashboard.getId(), Menu.Type.PAGE, "Workplace", "workplace", "工作台", "icon-dashboard", true, false, 1, "dashboard:workplace", ""); Menu role = new Menu(system.getId(), Menu.Type.PAGE, "Role", "role", "角色管理", null, true, false, 1, "system:role", ""); - Menu roleDelete = new Menu(role.getId(), Menu.Type.BUTTON, "roleDelete", null, "角色删除", null, true, false, 1, "system:role:delete", ""); Menu dept = new Menu(system.getId(), Menu.Type.PAGE, "Dept", "dept", "部门管理", null, true, false, 2, "system:dept", ""); Menu users = new Menu(system.getId(), Menu.Type.PAGE, "User", "user", "用户管理", null, true, false, 3, "system:user", ""); - Menu authority = new Menu(system.getId(), Menu.Type.BUTTON, "Authority", "authority", "权限管理", null, true, false, 4, "system:authority", ""); + Menu authority = new Menu(system.getId(), Menu.Type.PAGE, "Authority", "authority", "权限管理", null, true, false, 4, "system:authority", ""); Menu menu = new Menu(system.getId(), Menu.Type.PAGE, "Menu", "menu", "菜单管理", null, true, false, 5, "system:menu", ""); Menu notice = new Menu(message.getId(), Menu.Type.PAGE, "Notice", "notice", "通知管理", null, true, false, 1, "message:notice", ""); Menu bulletin = new Menu(message.getId(), Menu.Type.PAGE, "Bulletin", "bulletin", "公告管理", null, true, false, 2, "message:bulletin", ""); - menuService.saveBatch(List.of(workplace, roleDelete, dept, users, authority, menu, notice, bulletin)); - Menu roleCreate = new Menu(role.getId(), Menu.Type.BUTTON, "roleCreate", null, "角色新增", null, true, false, 1, "system:role:create", ""); - Menu roleUpdate = new Menu(role.getId(), Menu.Type.BUTTON, "roleUpdate", null, "角色修改", null, true, false, 1, "system:role:update", ""); - Menu roleQuery = new Menu(role.getId(), Menu.Type.BUTTON, "roleQuery", null, "角色查询", null, true, false, 1, "system:role:query", ""); - Menu deptSave = new Menu(dept.getId(), Menu.Type.BUTTON, "deptCreate", null, "部门新增", null, true, false, 1, "system:dept:create", ""); - Menu deptUpdate = new Menu(dept.getId(), Menu.Type.BUTTON, "deptUpdate", null, "部门修改", null, true, false, 1, "system:dept:update", ""); - Menu deptQuery = new Menu(dept.getId(), Menu.Type.BUTTON, "deptQuery", null, "部门查询", null, true, false, 1, "system:dept:query", ""); - Menu deptDelete = new Menu(dept.getId(), Menu.Type.BUTTON, "deptDelete", null, "部门删除", null, true, false, 1, "system:dept:delete", ""); - Menu userSave = new Menu(dept.getId(), Menu.Type.BUTTON, "userCreate", null, "用户新增", null, true, false, 1, "system:user:create", ""); - Menu userUpdate = new Menu(dept.getId(), Menu.Type.BUTTON, "userUpdate", null, "用户修改", null, true, false, 1, "system:user:update", ""); - Menu userQuery = new Menu(dept.getId(), Menu.Type.BUTTON, "userQuery", null, "用户查询", null, true, false, 1, "system:user:query", ""); - Menu userDelete = new Menu(dept.getId(), Menu.Type.BUTTON, "userDelete", null, "用户删除", null, true, false, 1, "system:user:delete", ""); - Menu menuSave = new Menu(menu.getId(), Menu.Type.BUTTON, "menuCreate", null, "菜单新增", null, true, false, 1, "system:menu:create", ""); - Menu menuUpdate = new Menu(menu.getId(), Menu.Type.BUTTON, "menuUpdate", null, "菜单修改", null, true, false, 1, "system:menu:update", ""); - Menu menuQuery = new Menu(menu.getId(), Menu.Type.BUTTON, "menuQuery", null, "菜单查询", null, true, false, 1, "system:menu:query", ""); - Menu menuDelete = new Menu(menu.getId(), Menu.Type.BUTTON, "menuDelete", null, "菜单删除", null, true, false, 1, "system:menu:delete", ""); - menuService.saveBatch(List.of(roleCreate, roleUpdate, roleQuery, deptSave, deptUpdate, deptQuery, deptDelete, userSave, userUpdate, userQuery, userDelete, menuSave, menuUpdate, menuQuery, menuDelete)); + menuService.saveBatch(List.of(workplace, dept, users, authority, menu, notice, bulletin)); + Menu roleCreate = new Menu(role.getId(), Menu.Type.OPERATION, "roleCreate", null, "角色新增", null, true, false, 1, "system:role:create", ""); + Menu roleDelete = new Menu(role.getId(), Menu.Type.OPERATION, "roleDelete", null, "角色删除", null, true, false, 1, "system:role:delete", ""); + Menu roleUpdate = new Menu(role.getId(), Menu.Type.OPERATION, "roleUpdate", null, "角色修改", null, true, false, 1, "system:role:update", ""); + Menu roleQuery = new Menu(role.getId(), Menu.Type.OPERATION, "roleQuery", null, "角色查询", null, true, false, 1, "system:role:query", ""); + Menu deptSave = new Menu(dept.getId(), Menu.Type.OPERATION, "deptCreate", null, "部门新增", null, true, false, 1, "system:dept:create", ""); + Menu deptUpdate = new Menu(dept.getId(), Menu.Type.OPERATION, "deptUpdate", null, "部门修改", null, true, false, 1, "system:dept:update", ""); + Menu deptQuery = new Menu(dept.getId(), Menu.Type.OPERATION, "deptQuery", null, "部门查询", null, true, false, 1, "system:dept:query", ""); + Menu deptDelete = new Menu(dept.getId(), Menu.Type.OPERATION, "deptDelete", null, "部门删除", null, true, false, 1, "system:dept:delete", ""); + Menu userSave = new Menu(dept.getId(), Menu.Type.OPERATION, "userCreate", null, "用户新增", null, true, false, 1, "system:user:create", ""); + Menu userUpdate = new Menu(dept.getId(), Menu.Type.OPERATION, "userUpdate", null, "用户修改", null, true, false, 1, "system:user:update", ""); + Menu userQuery = new Menu(dept.getId(), Menu.Type.OPERATION, "userQuery", null, "用户查询", null, true, false, 1, "system:user:query", ""); + Menu userDelete = new Menu(dept.getId(), Menu.Type.OPERATION, "userDelete", null, "用户删除", null, true, false, 1, "system:user:delete", ""); + Menu menuSave = new Menu(menu.getId(), Menu.Type.OPERATION, "menuCreate", null, "菜单新增", null, true, false, 1, "system:menu:create", ""); + Menu menuUpdate = new Menu(menu.getId(), Menu.Type.OPERATION, "menuUpdate", null, "菜单修改", null, true, false, 1, "system:menu:update", ""); + Menu menuQuery = new Menu(menu.getId(), Menu.Type.OPERATION, "menuQuery", null, "菜单查询", null, true, false, 1, "system:menu:query", ""); + Menu menuDelete = new Menu(menu.getId(), Menu.Type.OPERATION, "menuDelete", null, "菜单删除", null, true, false, 1, "system:menu:delete", ""); + menuService.saveBatch(List.of(roleCreate, roleDelete, roleUpdate, roleQuery, deptSave, deptUpdate, deptQuery, deptDelete, userSave, userUpdate, userQuery, userDelete, menuSave, menuUpdate, menuQuery, menuDelete)); } @Test public void test() { Role admin = roleService.lambdaQuery().eq(Role::getName, "admin").one(); - menuService.list().forEach(menu -> { - roleMenuRepository.insert(new RoleMenu(admin.getId(), menu.getId())); - }); + menuService.list().forEach(menu -> roleMenuRepository.insert(new RoleMenu(admin.getId(), menu.getId()))); + } + + @Test + public void testRole() { + Role admin = roleService.lambdaQuery().eq(Role::getName, "admin").one(); + List menus = menuService.selectByRoleId(admin.getId()); + assertEquals(27, menus.size()); } @Test