From 2635c22f278bae2faaaa2a514edd7e37756e435a Mon Sep 17 00:00:00 2001 From: daniel LEE Date: Sun, 17 Nov 2024 08:48:39 +0900 Subject: [PATCH] =?UTF-8?q?=EC=99=BC=EC=AA=BD=20=EC=A3=BC=EB=A7=A4?= =?UTF-8?q?=EB=89=B4=20API=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/dataSources.xml | 4 +- .../login/controller/UserLoginController.java | 3 +- .../javavue/login/dao/UserLoginDao.java | 84 ++++++++++++++++++- .../login/service/UserLoginService.java | 2 +- .../login/service/UserLoginServiceImpl.java | 45 +++++++++- .../javavue/model/AsaAdminSiteRoleRel.java | 46 ++++++++++ .../javavue/model/AsaPermission.java | 45 ++++++++++ nuxt/components/layout/LeftMenu.vue | 7 +- nuxt/components/layout/LeftMenuItem.vue | 47 ++++++----- 9 files changed, 253 insertions(+), 30 deletions(-) create mode 100644 java/src/main/java/com/leejk0523/javavue/model/AsaAdminSiteRoleRel.java create mode 100644 java/src/main/java/com/leejk0523/javavue/model/AsaPermission.java diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index dc8b1e2..f8a663b 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -1,13 +1,13 @@ - + mariadb true true $PROJECT_DIR$/java/src/main/resources/application.properties org.mariadb.jdbc.Driver - jdbc:mariadb://localhost:3306/pub + jdbc:mariadb://leejk0523.com:3306/pub diff --git a/java/src/main/java/com/leejk0523/javavue/login/controller/UserLoginController.java b/java/src/main/java/com/leejk0523/javavue/login/controller/UserLoginController.java index 78819a5..b17f37e 100644 --- a/java/src/main/java/com/leejk0523/javavue/login/controller/UserLoginController.java +++ b/java/src/main/java/com/leejk0523/javavue/login/controller/UserLoginController.java @@ -3,6 +3,7 @@ package com.leejk0523.javavue.login.controller; import com.leejk0523.javavue.login.service.UserLoginService; import com.leejk0523.javavue.login.vo.In; import com.leejk0523.javavue.login.vo.Member; +import com.leejk0523.javavue.login.vo.Out; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -16,7 +17,7 @@ public class UserLoginController { private final UserLoginService userLoginService; @PostMapping("/api/login") - private ResponseEntity login(@RequestBody In in) { + private ResponseEntity login(@RequestBody In in) { final var authorization = userLoginService.login(in); if (Objects.isNull(authorization)) { diff --git a/java/src/main/java/com/leejk0523/javavue/login/dao/UserLoginDao.java b/java/src/main/java/com/leejk0523/javavue/login/dao/UserLoginDao.java index c617f8e..915bdc5 100644 --- a/java/src/main/java/com/leejk0523/javavue/login/dao/UserLoginDao.java +++ b/java/src/main/java/com/leejk0523/javavue/login/dao/UserLoginDao.java @@ -3,13 +3,17 @@ package com.leejk0523.javavue.login.dao; import com.leejk0523.javavue.login.vo.AdminMember; import com.leejk0523.javavue.login.vo.In; import com.leejk0523.javavue.login.vo.Member; -import com.leejk0523.javavue.model.AsaAdminMember; -import com.leejk0523.javavue.model.QAsaAdminMember; +import com.leejk0523.javavue.login.vo.Out; +import com.leejk0523.javavue.model.*; import com.querydsl.core.types.Projections; import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + @Component public class UserLoginDao extends QuerydslRepositorySupport { @@ -34,4 +38,80 @@ public class UserLoginDao extends QuerydslRepositorySupport { .where(asaAdminMember.adminId.eq(in.getMemberId())) .fetchOne(); } + + public List findAllMenuByAdminId(String adminId) { + final var menu = QAsaMenu.asaMenu; + final var permission = QAsaPermission.asaPermission; + final var adminSiteRoleRel = QAsaAdminSiteRoleRel.asaAdminSiteRoleRel; + + return from(menu) + .innerJoin(adminSiteRoleRel).on( + menu.siteId.eq(adminSiteRoleRel.siteId) + ) + .innerJoin(permission).on( + adminSiteRoleRel.siteId.eq(permission.siteId) + .and(adminSiteRoleRel.roleCode.eq(permission.roleCode)) + .and(menu.menuId.eq(permission.menuId)) + ) + .distinct() + .select(Projections.bean( + Out.Menu.class, + menu.menuId, + menu.upMenuId, + menu.menuName, + menu.menuType, + menu.menuDepth, + menu.menuOrder, + menu.menuUrl + )) + .where( + adminSiteRoleRel.adminId.eq(adminId) + .and(adminSiteRoleRel.siteId.eq("admin")) + .and(menu.menuType.ne(AsaMenu.Type.API)) + .and(menu.menuStatus.eq(AsaMenu.Status.ENABLED)) + ) + .orderBy(menu.menuDepth.asc(), menu.menuOrder.asc()) + .fetch(); + } + + public List findAllPermitApiByAdminId(String adminId) { + final var menu = QAsaMenu.asaMenu; + final var permission = QAsaPermission.asaPermission; + final var adminSiteRoleRel = QAsaAdminSiteRoleRel.asaAdminSiteRoleRel; + + return from(menu) + .innerJoin(adminSiteRoleRel).on( + menu.siteId.eq(adminSiteRoleRel.siteId) + ) + .innerJoin(permission).on( + adminSiteRoleRel.siteId.eq(permission.siteId) + .and(adminSiteRoleRel.roleCode.eq(permission.roleCode)) + .and(menu.menuId.eq(permission.menuId)) + ) + .distinct() + .select(Projections.bean( + Out.PermitApi.class, + menu.menuUrl + )) + .where( + adminSiteRoleRel.adminId.eq(adminId) + .and(adminSiteRoleRel.siteId.eq("admin")) + .and(menu.menuType.eq(AsaMenu.Type.API)) + ) + .fetch(); + } + + public List findRoleCodeByAdminId(String adminId) { + final var adminSiteRole = QAsaAdminSiteRoleRel.asaAdminSiteRoleRel; + final var role = QAsaRole.asaRole; + + return from(adminSiteRole) + .innerJoin(role).on(adminSiteRole.roleCode.eq(role.roleCode) + .and(adminSiteRole.siteId.eq(role.siteId)) + ) + .select(role) + .where(adminSiteRole.adminId.eq(adminId)) + .fetch(); + } + } \ No newline at end of file diff --git a/java/src/main/java/com/leejk0523/javavue/login/service/UserLoginService.java b/java/src/main/java/com/leejk0523/javavue/login/service/UserLoginService.java index 5f95032..c5f1e26 100644 --- a/java/src/main/java/com/leejk0523/javavue/login/service/UserLoginService.java +++ b/java/src/main/java/com/leejk0523/javavue/login/service/UserLoginService.java @@ -7,5 +7,5 @@ import com.leejk0523.javavue.login.vo.Member; import com.leejk0523.javavue.login.vo.Out; public interface UserLoginService { - Member login(In in); + Out login(In in); } diff --git a/java/src/main/java/com/leejk0523/javavue/login/service/UserLoginServiceImpl.java b/java/src/main/java/com/leejk0523/javavue/login/service/UserLoginServiceImpl.java index 5d8cb87..a296b18 100644 --- a/java/src/main/java/com/leejk0523/javavue/login/service/UserLoginServiceImpl.java +++ b/java/src/main/java/com/leejk0523/javavue/login/service/UserLoginServiceImpl.java @@ -3,16 +3,57 @@ package com.leejk0523.javavue.login.service; import com.leejk0523.javavue.login.dao.UserLoginDao; import com.leejk0523.javavue.login.vo.In; import com.leejk0523.javavue.login.vo.Member; +import com.leejk0523.javavue.login.vo.Out; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + @Service @RequiredArgsConstructor public class UserLoginServiceImpl implements UserLoginService { private final UserLoginDao userLoginDAO; @Override - public Member login(In in) { - return userLoginDAO.findByMemberId(in); + public Out login(In in) { + var member = userLoginDAO.findByMemberId(in); + var menuList = getMenuList(member.getMemberId()); + var permitApiList = userLoginDAO.findAllPermitApiByAdminId(member.getMemberId()); + + return Out.builder() + .memberNo(member.getMemberNo()) + .memberName(member.getMemberName()) + .menuList(menuList) + .permitApiList(permitApiList) + .authenticated(true) + .build(); + } + + private List getMenuList(String adminId) { + final var menuList = userLoginDAO.findAllMenuByAdminId(adminId); + final var root = menuList.stream() + .filter(menu -> menu.getMenuDepth().equals(1)) + .collect(Collectors.toList()); + + for (var parent : root) { + nestedMenuList(menuList, parent); + } + + return root; + } + + private void nestedMenuList(List list, Out.Menu parent) { + final var children = list.stream() + .filter(child -> Objects.nonNull(child.getUpMenuId()) + && child.getUpMenuId().equals(parent.getMenuId())) + .collect(Collectors.toList()); + + parent.setChildren(children.isEmpty() ? null : children); + + for (var child : children) { + nestedMenuList(list, child); + } } } diff --git a/java/src/main/java/com/leejk0523/javavue/model/AsaAdminSiteRoleRel.java b/java/src/main/java/com/leejk0523/javavue/model/AsaAdminSiteRoleRel.java new file mode 100644 index 0000000..0c74246 --- /dev/null +++ b/java/src/main/java/com/leejk0523/javavue/model/AsaAdminSiteRoleRel.java @@ -0,0 +1,46 @@ +package com.leejk0523.javavue.model; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import jakarta.persistence.*; +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "asa_admin_site_role_rel") +@IdClass(AsaAdminSiteRoleRel.Key.class) +public class AsaAdminSiteRoleRel { + + @Id + @Size(max = 50) + @NotNull + @Column(name = "ADMIN_ID", nullable = false, length = 50) + private String adminId; + + @Id + @Size(max = 20) + @NotNull + @Column(name = "SITE_ID", nullable = false, length = 20) + private String siteId; + + @Id + @Size(max = 500) + @Column(name = "ROLE_CODE", length = 100) + private String roleCode; + + @Data + public static class Key implements Serializable { + private String adminId; + private String siteId; + private String roleCode; + } + +} \ No newline at end of file diff --git a/java/src/main/java/com/leejk0523/javavue/model/AsaPermission.java b/java/src/main/java/com/leejk0523/javavue/model/AsaPermission.java new file mode 100644 index 0000000..46f3bae --- /dev/null +++ b/java/src/main/java/com/leejk0523/javavue/model/AsaPermission.java @@ -0,0 +1,45 @@ +package com.leejk0523.javavue.model; + +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import jakarta.persistence.*; +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "ASA_PERMISSION") +@IdClass(AsaPermission.Key.class) +public class AsaPermission { + + @Id + @Size(max = 100) + @NotNull + @Column(name = "ROLE_CODE", nullable = false, length = 100) + private String roleCode; + + @Id + @Size(max = 100) + @Column(name = "MENU_ID", length = 100, nullable = false) + private String menuId; + + @Id + @Size(max = 20) + @NotNull + @Column(name = "SITE_ID", nullable = false, length = 20) + private String siteId; + + @Data + public static class Key implements Serializable { + private String roleCode; + private String menuId; + private String siteId; + } +} diff --git a/nuxt/components/layout/LeftMenu.vue b/nuxt/components/layout/LeftMenu.vue index cb59930..9bfdd98 100644 --- a/nuxt/components/layout/LeftMenu.vue +++ b/nuxt/components/layout/LeftMenu.vue @@ -1,9 +1,14 @@ diff --git a/nuxt/components/layout/LeftMenuItem.vue b/nuxt/components/layout/LeftMenuItem.vue index da53703..d4a1ba0 100644 --- a/nuxt/components/layout/LeftMenuItem.vue +++ b/nuxt/components/layout/LeftMenuItem.vue @@ -1,26 +1,31 @@