왼쪽 주매뉴 API 적용
This commit is contained in:
parent
8503ef4f3c
commit
2635c22f27
|
|
@ -1,13 +1,13 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="pub" uuid="48fe1c90-2c8b-4422-ab16-143a998890c0">
|
||||
<data-source source="LOCAL" name="pub@leejk0523.com" uuid="ba69e241-137d-4c9f-b047-5010d887b198">
|
||||
<driver-ref>mariadb</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<imported>true</imported>
|
||||
<remarks>$PROJECT_DIR$/java/src/main/resources/application.properties</remarks>
|
||||
<jdbc-driver>org.mariadb.jdbc.Driver</jdbc-driver>
|
||||
<jdbc-url>jdbc:mariadb://localhost:3306/pub</jdbc-url>
|
||||
<jdbc-url>jdbc:mariadb://leejk0523.com:3306/pub</jdbc-url>
|
||||
<jdbc-additional-properties>
|
||||
<property name="com.intellij.clouds.kubernetes.db.host.port" />
|
||||
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
|
||||
|
|
|
|||
|
|
@ -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<Member> login(@RequestBody In in) {
|
||||
private ResponseEntity<Out> login(@RequestBody In in) {
|
||||
final var authorization = userLoginService.login(in);
|
||||
|
||||
if (Objects.isNull(authorization)) {
|
||||
|
|
|
|||
|
|
@ -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<Out.Menu> 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<Out.PermitApi> 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<AsaRole> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Out.Menu> 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<Out.Menu> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,14 @@
|
|||
<script setup lang="ts">
|
||||
import { useAuthStore } from '~/stores/login';
|
||||
|
||||
const authStore = useAuthStore();
|
||||
const { loginResponse } = storeToRefs(authStore);
|
||||
|
||||
const selectedKeys = ref<string[]>([]);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<a-menu v-model:selected-keys="selectedKeys" mode="inline" theme="dark">
|
||||
<!-- <layout-left-menu-item :menu-list="authorization.menuList" />-->
|
||||
<layout-left-menu-item :menu-list="loginResponse.menuList" />
|
||||
</a-menu>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -1,26 +1,31 @@
|
|||
<script setup lang="ts">
|
||||
import type { AuthorizationMenuType } from '~/types/login';
|
||||
|
||||
defineProps<{
|
||||
menuList: AuthorizationMenuType[]
|
||||
}>();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<!-- <template v-for="menu in menuList" :key="menu.menuId">-->
|
||||
<!-- <a-menu-item :key="menu.menuId" v-if="!menu.children">-->
|
||||
<!-- <nuxt-link :to="menu.menuUrl">{{ menu.menuName }}</nuxt-link>-->
|
||||
<!-- </a-menu-item>-->
|
||||
<!-- <a-sub-menu :key="menu.menuId" v-if="menu.children">-->
|
||||
<!-- <template #title>{{ menu.menuName }}</template>-->
|
||||
<!-- <template v-for="child in menu.children">-->
|
||||
<!-- <template v-if="!child.children">-->
|
||||
<!-- <a-menu-item :key="child.menuId">-->
|
||||
<!-- <nuxt-link :to="child.menuUrl">{{ child.menuName }}</nuxt-link>-->
|
||||
<!-- </a-menu-item>-->
|
||||
<!-- </template>-->
|
||||
<!-- <template v-if="child.children">-->
|
||||
<!-- <a-sub-menu :key="child.menuId">-->
|
||||
<!-- <template #title>{{ child.menuName }}</template>-->
|
||||
<!-- <layout-left-menu-item :menu-list="child.children" />-->
|
||||
<!-- </a-sub-menu>-->
|
||||
<!-- </template>-->
|
||||
<!-- </template>-->
|
||||
<!-- </a-sub-menu>-->
|
||||
<!-- </template>-->
|
||||
<template v-for="menu in menuList" :key="menu.menuId">
|
||||
<a-menu-item :key="menu.menuId" v-if="!menu.children">
|
||||
<nuxt-link :to="menu.menuUrl">{{ menu.menuName }}</nuxt-link>
|
||||
</a-menu-item>
|
||||
<a-sub-menu :key="menu.menuId" v-if="menu.children">
|
||||
<template #title>{{ menu.menuName }}</template>
|
||||
<template v-for="child in menu.children">
|
||||
<template v-if="!child.children">
|
||||
<a-menu-item :key="child.menuId">
|
||||
<nuxt-link :to="child.menuUrl">{{ child.menuName }}</nuxt-link>
|
||||
</a-menu-item>
|
||||
</template>
|
||||
<template v-if="child.children">
|
||||
<a-sub-menu :key="child.menuId">
|
||||
<template #title>{{ child.menuName }}</template>
|
||||
<layout-left-menu-item :menu-list="child.children" />
|
||||
</a-sub-menu>
|
||||
</template>
|
||||
</template>
|
||||
</a-sub-menu>
|
||||
</template>
|
||||
</template>
|
||||
|
|
|
|||
Loading…
Reference in New Issue