fix: let owners and admins change a user's role from the edit-user modal

This commit is contained in:
2026-10-20 12:50:32 +03:30
parent 86e9ee6c2c
commit bb8fd489de
+19 -1
View File
@@ -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="خالی بگذارید اگر تغییر نمی‌دهید"
/>
</label>
<p class="hint">نقش فعلی: {{ editRoleLabel }} — برای تغییر نقش از بخش نقش‌ها استفاده کنید.</p>
<label v-if="!editRoleLocked">
نقش
<select v-model="editRoleId">
<option v-for="role in inviteableRoles" :key="role.id" :value="role.id">
{{ roleTreeLabel(role) }}
</option>
</select>
</label>
<p v-else class="hint">نقش فعلی: {{ editRoleLabel }} — نقش مالک را فقط مالک می‌تواند تغییر دهد.</p>
</form>
<template #footer>
<button type="button" class="btn ghost" @click="editOpen = false">انصراف</button>