From bb8fd489deb4718de05d1986deb2587d53095c49 Mon Sep 17 00:00:00 2001 From: Mahdi Date: Tue, 20 Oct 2026 12:50:32 +0330 Subject: [PATCH] fix: let owners and admins change a user's role from the edit-user modal --- apps/web/src/views/TeamSettingsView.vue | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/apps/web/src/views/TeamSettingsView.vue b/apps/web/src/views/TeamSettingsView.vue index 93cefe9..72240f4 100644 --- a/apps/web/src/views/TeamSettingsView.vue +++ b/apps/web/src/views/TeamSettingsView.vue @@ -112,6 +112,10 @@ const editName = ref(''); const editMobile = ref(''); const editPassword = ref(''); const editRoleLabel = ref(''); +const editRoleId = ref(''); +const editInitialRoleId = ref(''); +/** مدیر نمی‌تواند نقش مالک را عوض کند؛ آن موقع فقط برچسب نقش نشان داده می‌شود */ +const editRoleLocked = ref(false); const roleFormOpen = ref(false); const roleFormSaving = ref(false); @@ -448,6 +452,9 @@ function openEditUser(user: OrgUserDto) { editMobile.value = user.mobile ?? ''; editPassword.value = ''; editRoleLabel.value = user.orgRoleName || '—'; + editRoleId.value = user.orgRoleId ?? ''; + editInitialRoleId.value = user.orgRoleId ?? ''; + editRoleLocked.value = user.role === 'owner' && auth.user?.role !== 'owner'; editOpen.value = true; error.value = ''; ok.value = ''; @@ -472,6 +479,9 @@ async function submitEditUser() { ...(editPassword.value ? { password: editPassword.value } : {}), }; await api.patch(`/users/${editUserId.value}`, payload); + if (!editRoleLocked.value && editRoleId.value && editRoleId.value !== editInitialRoleId.value) { + await api.patch(`/users/${editUserId.value}/role`, { orgRoleId: editRoleId.value }); + } editOpen.value = false; ok.value = 'مشخصات کاربر ذخیره شد.'; await load(); @@ -1210,7 +1220,15 @@ onUnmounted(() => { placeholder="خالی بگذارید اگر تغییر نمی‌دهید" /> -

نقش فعلی: {{ editRoleLabel }} — برای تغییر نقش از بخش نقش‌ها استفاده کنید.

+ +

نقش فعلی: {{ editRoleLabel }} — نقش مالک را فقط مالک می‌تواند تغییر دهد.