권한부여 수정

This commit is contained in:
dyhj625 2025-04-10 15:14:53 +09:00
parent 803e6da4b3
commit 11ebea8ccd
2 changed files with 75 additions and 60 deletions

View File

@ -148,7 +148,7 @@ router.beforeEach(async (to, from, next) => {
// Authorization 페이지는 ID가 26이 아니면 접근 차단 // Authorization 페이지는 ID가 26이 아니면 접근 차단
if (to.path === '/authorization' && userId !== allowedUserId) { if (to.path === '/authorization' && userId !== allowedUserId) {
return next('/'); return next();
} }
// 비로그인 사용자만 접근 가능한 페이지인데 로그인된 경우 → 홈으로 이동 // 비로그인 사용자만 접근 가능한 페이지인데 로그인된 경우 → 홈으로 이동

View File

@ -6,14 +6,23 @@
<div class="user-card-container"> <div class="user-card-container">
<div v-for="user in users" :key="user.id" class="user-card"> <div v-for="user in users" :key="user.id" class="user-card">
<!-- 프로필 사진 --> <!-- 프로필 사진 -->
<img :src="getProfileImage(user.photo)" class="profile-img" alt="프로필 사진" @error="setDefaultImage" /> <img
:src="getProfileImage(user.photo)"
class="profile-img"
alt="프로필 사진"
@error="setDefaultImage"
/>
<!-- 사용자 정보 --> <!-- 사용자 정보 -->
<div class="user-info"> <div class="user-info">
<h5>{{ user.name }}</h5> <h5>{{ user.name }}</h5>
</div> </div>
<!-- 권한 토글 버튼 --> <!-- 권한 토글 버튼 (기본 동작 막고 클릭시 직접 토글 처리) -->
<label class="switch me-0"> <label class="switch me-0">
<input type="checkbox" :checked="user.isAdmin" @change="toggleAdmin(user)" /> <input
type="checkbox"
:checked="user.isAdmin"
@click="handleToggle($event, user)"
/>
<span class="slider round"></span> <span class="slider round"></span>
</label> </label>
</div> </div>
@ -32,20 +41,17 @@ const users = ref([]);
const toastStore = useToastStore(); const toastStore = useToastStore();
const baseUrl = axios.defaults.baseURL.replace(/api\/$/, ""); const baseUrl = axios.defaults.baseURL.replace(/api\/$/, "");
const defaultProfile = "/img/icons/icon.png"; const defaultProfile = "/img/icons/icon.png";
const allowedUserId = 1; // ID (!!) const allowedUserId = 1; // ID ( )
// //
async function fetchUsers() { async function fetchUsers() {
try { try {
const response = await axios.get('admin/users'); // API const response = await axios.get('admin/users'); // API
// API
if (!response.data || !Array.isArray(response.data.data)) { if (!response.data || !Array.isArray(response.data.data)) {
throw new Error("올바른 데이터 형식이 아닙니다."); throw new Error("올바른 데이터 형식이 아닙니다.");
} }
// MEMBERSEQ 1
users.value = response.data.data users.value = response.data.data
.filter(user => user.MEMBERSEQ !== allowedUserId) // MEMBERSEQ 1 .filter(user => user.MEMBERSEQ !== allowedUserId)
.map(user => ({ .map(user => ({
id: user.MEMBERSEQ, id: user.MEMBERSEQ,
name: user.MEMBERNAM, name: user.MEMBERNAM,
@ -53,7 +59,6 @@ async function fetchUsers() {
color: user.MEMBERCOL, color: user.MEMBERCOL,
isAdmin: user.MEMBERROL === 'ROLE_ADMIN', isAdmin: user.MEMBERROL === 'ROLE_ADMIN',
})); }));
} catch (error) { } catch (error) {
toastStore.onToast('사용자 목록을 불러오지 못했습니다.', 'e'); toastStore.onToast('사용자 목록을 불러오지 못했습니다.', 'e');
} }
@ -69,22 +74,31 @@ function setDefaultImage(event) {
event.target.src = defaultProfile; event.target.src = defaultProfile;
} }
// //
async function toggleAdmin(user) { async function handleToggle(event, user) {
// Prevent the default checkbox toggle behavior
event.preventDefault();
// : ( )
const originalState = user.isAdmin;
const newState = !originalState;
const requestData = { const requestData = {
id: user.id, id: user.id,
role: user.isAdmin ? 'MEMBER' : 'ADMIN' role: originalState ? 'MEMBER' : 'ADMIN'
}; };
try { try {
const response = await axios.put('admin/role', requestData); const response = await axios.put('admin/role', requestData);
if (response.status === 200) { if (response.status === 200) {
user.isAdmin = !user.isAdmin; //
user.isAdmin = newState;
toastStore.onToast(`'${user.name}'의 권한이 '${requestData.role}'(으)로 변경되었습니다.`, 's'); toastStore.onToast(`'${user.name}'의 권한이 '${requestData.role}'(으)로 변경되었습니다.`, 's');
} else { } else {
throw new Error('권한 변경 실패'); throw new Error('권한 변경 실패');
} }
} catch (error) { } catch (error) {
//
toastStore.onToast('권한 변경에 실패했습니다.', 'e'); toastStore.onToast('권한 변경에 실패했습니다.', 'e');
} }
} }
@ -93,4 +107,5 @@ onMounted(fetchUsers);
</script> </script>
<style scoped> <style scoped>
/* 필요에 따라 스타일 추가 */
</style> </style>