-
@@ -2000,9 +2000,9 @@
-
+
-
+
diff --git a/user-management/web/static/js/tkuser-core.js b/user-management/web/static/js/tkuser-core.js
index 3b2f553..e21c9d1 100644
--- a/user-management/web/static/js/tkuser-core.js
+++ b/user-management/web/static/js/tkuser-core.js
@@ -128,9 +128,6 @@ async function init() {
await loadDepartmentsCache();
await loadUsers();
} else {
- // 비밀번호 변경은 항상 표시
- document.getElementById('passwordChangeSection').classList.remove('hidden');
-
// tkuser 탭별 권한 확인
try {
const result = await api(`/permissions/users/${currentUser.id}/effective-permissions`);
@@ -154,10 +151,8 @@ async function init() {
document.getElementById('tabNav').classList.remove('hidden');
// 비허용 탭 버튼 숨김
document.querySelectorAll('.tab-btn').forEach(btn => {
- const onclick = btn.getAttribute('onclick') || '';
- const match = onclick.match(/switchTab\('(\w+)'\)/);
- if (match) {
- const tabName = match[1];
+ const tabName = btn.getAttribute('data-tab');
+ if (tabName) {
// permissions 탭은 admin 전용
if (tabName === 'permissions') {
btn.style.display = 'none';
@@ -167,12 +162,20 @@ async function init() {
}
});
- // tkuser.users 권한 시 adminSection 표시
+ // tkuser.users 권한 시 adminSection + passwordChangeSection 표시
if (currentUserAllowedTabs.has('users')) {
document.getElementById('adminSection').classList.remove('hidden');
+ document.getElementById('passwordChangeSection').classList.remove('hidden');
await loadDepartmentsCache();
await loadUsers();
+ } else {
+ // users 권한 없음 → tab-users 숨기고 첫 허용 탭으로 자동 전환
+ document.getElementById('tab-users').classList.add('hidden');
+ switchTab([...currentUserAllowedTabs][0]);
}
+ } else {
+ // 아무 권한 없음 → 비밀번호 변경만 표시 (fallback)
+ document.getElementById('passwordChangeSection').classList.remove('hidden');
}
}
} catch(e) {
@@ -194,7 +197,7 @@ async function init() {
'consumables','notificationRecipients'];
const urlTab = new URLSearchParams(location.search).get('tab');
if (urlTab && ALLOWED_TABS.includes(urlTab)) {
- const tabBtn = document.querySelector(`.tab-btn[onclick*="switchTab('${urlTab}')"]`);
+ const tabBtn = document.querySelector(`.tab-btn[data-tab="${urlTab}"]`);
if (tabBtn && tabBtn.style.display !== 'none') {
tabBtn.click();
const url = new URL(location);
diff --git a/user-management/web/static/js/tkuser-tabs.js b/user-management/web/static/js/tkuser-tabs.js
index 2f2edc2..bfb3aab 100644
--- a/user-management/web/static/js/tkuser-tabs.js
+++ b/user-management/web/static/js/tkuser-tabs.js
@@ -1,5 +1,5 @@
/* ===== Tab ===== */
-function switchTab(name) {
+function switchTab(name, event) {
// 권한 guard: currentUserAllowedTabs가 Set이면 허용된 탭만 접근
if (typeof currentUserAllowedTabs !== 'undefined'
&& currentUserAllowedTabs
@@ -8,7 +8,12 @@ function switchTab(name) {
document.querySelectorAll('[id^="tab-"]').forEach(el => el.classList.add('hidden'));
document.getElementById('tab-' + name)?.classList.remove('hidden');
document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active'));
- event.currentTarget.classList.add('active');
+ if (event?.currentTarget) {
+ event.currentTarget.classList.add('active');
+ } else {
+ const btn = document.querySelector(`.tab-btn[data-tab="${name}"]`);
+ if (btn) btn.classList.add('active');
+ }
// 사이드바 레이아웃 탭에서 main/nav/header 너비 확장
const mainEl = document.querySelector('main');
const navInner = document.getElementById('tabNavInner');