fix: handle node admin action permissions (#12857)

This commit is contained in:
ssongliu
2026-05-26 18:34:09 +08:00
committed by GitHub
parent 7d20118f38
commit 61a2e20798
2 changed files with 19 additions and 2 deletions
@@ -76,6 +76,7 @@
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue';
import { useGlobalStore } from '@/composables/useGlobalStore';
import { hasManagePermissionAccess, hasPermissionAccess } from '@/utils/permission';
const slots = useSlots();
const { isMobile, openMenuTabs } = useGlobalStore();
@@ -164,7 +165,15 @@ const closeRightClick = () => {
};
const disabled = computed(() => {
return function (btn: any) {
return typeof btn.disabled === 'function' ? btn.disabled(rightClick.value.currentRow) : btn.disabled;
let permissionDisabled = false;
if (btn.permission === true) {
permissionDisabled = !hasManagePermissionAccess();
} else if (btn.permission !== undefined) {
permissionDisabled = !hasPermissionAccess(btn.permission);
}
const buttonDisabled =
typeof btn.disabled === 'function' ? btn.disabled(rightClick.value.currentRow) : btn.disabled;
return permissionDisabled || buttonDisabled;
};
});
const visibleRightButtons = computed(() => {
+9 -1
View File
@@ -1,6 +1,6 @@
import router from '@/routers';
import { GlobalStore } from '@/store';
import { normalizeToManageCode } from '@/utils/permission-codes';
import { isMasterOnlyPermissionCode, normalizeToManageCode } from '@/utils/permission-codes';
export type PermissionBindingValue = string | string[] | undefined;
export type PermissionMode = 'manage' | 'view';
@@ -53,6 +53,14 @@ const hasPermissionAccessByMode = (mode: PermissionMode, value?: PermissionBindi
if (normalizedPermissions.length === 0) {
return globalStore.isAdmin || globalStore.isNodeAdmin;
}
if (
mode === 'manage' &&
globalStore.isNodeAdmin &&
!globalStore.isMaster &&
normalizedPermissions.some((permission) => !isMasterOnlyPermissionCode(permission))
) {
return true;
}
return normalizedPermissions.some((permission) => globalStore.hasPermission(permission));
};