[메뉴 권한 1차 작업]

This commit is contained in:
2025-09-23 14:15:32 +09:00
parent 9bbc4f82b6
commit 29fbda149b
10 changed files with 1808 additions and 596 deletions

View File

@@ -7,26 +7,20 @@
<button
class="menu-btn"
:class="{ active: modelValue === 'home' }"
@click="$emit('update:modelValue', 'home')"
@click="onMenuClick('home')"
>
HOME
</button>
<!-- 테스트트 메뉴 -->
<!-- 권한 기반 메뉴 -->
<button
v-for="menu in availableMenus"
:key="menu.code"
class="menu-btn"
:class="{ active: modelValue === 'test' }"
@click="$emit('update:modelValue', 'test')"
:class="{ active: modelValue === menu.code }"
@click="onMenuClick(menu.code)"
>
테스트 메뉴
</button>
<!-- 관리자 메뉴 (관리자만 표시) -->
<button
v-if="userStore.isAdmin"
class="menu-btn"
:class="{ active: modelValue === 'admin' }"
@click="$emit('update:modelValue', 'admin')"
>
관리자 메뉴
{{ menu.name }}
</button>
</nav>
@@ -77,22 +71,35 @@
</template>
<script setup>
import { ref, onMounted, onBeforeUnmount } from "vue";
import { ref, computed, onMounted, onBeforeUnmount } from "vue";
import { useRouter } from "vue-router";
import { useUserStore } from "~/stores/user";
import { usePermissionsStore } from "~/stores/permissions";
defineProps({
modelValue: {
type: String,
required: true,
},
});
defineEmits(["update:modelValue"]);
// defineModel 사용
const modelValue = defineModel({ type: String, required: true });
const showDropdown = ref(false);
const router = useRouter();
const userStore = useUserStore();
const permissionStore = usePermissionsStore();
// 권한 초기화
onMounted(async () => {
await permissionStore.fetchPermissions();
});
// 권한이 있는 메뉴들만 필터링
const availableMenus = computed(() => {
return permissionStore.permissions.resources.menus.filter(menu => {
return permissionStore.hasMenuPermission(menu.code);
});
});
// 메뉴 클릭 핸들러
function onMenuClick(menu) {
modelValue.value = menu;
}
function toggleDropdown() {
showDropdown.value = !showDropdown.value;