优化审核入口权限刷新逻辑

This commit is contained in:
kx_guo 2026-09-18 13:46:14 +08:00
parent d04e8888cb
commit 31e5325cc6
3 changed files with 26 additions and 15 deletions

View File

@ -15,7 +15,12 @@ import { ref } from "vue";
import { featureFlags } from "@/config/features"; import { featureFlags } from "@/config/features";
defineProps<{ modelValue: string; loading: boolean; canUpload: boolean }>(); const props = defineProps<{
modelValue: string;
loading: boolean;
canUpload: boolean;
canReview: boolean;
}>();
const emit = defineEmits<{ const emit = defineEmits<{
"update:modelValue": [value: string]; "update:modelValue": [value: string];
@ -153,9 +158,9 @@ const functions: Array<{
</form> </form>
<div class="function-grid"> <div class="function-grid">
<template v-for="item in functions" :key="item.title">
<button <button
v-for="item in functions" v-if="item.tool !== 'review' || props.canReview"
:key="item.title"
class="function-card" class="function-card"
type="button" type="button"
@click="emit('tool', item.tool)" @click="emit('tool', item.tool)"
@ -168,6 +173,7 @@ const functions: Array<{
><small>{{ item.description }}</small></span ><small>{{ item.description }}</small></span
> >
</button> </button>
</template>
</div> </div>
</div> </div>
</template> </template>

View File

@ -681,6 +681,7 @@ async function scrollToBottom(behavior: "smooth" | "auto" = "smooth") {
v-model="prompt" v-model="prompt"
:loading="loading" :loading="loading"
:can-upload="auth.hasPermission('risk_item.submit')" :can-upload="auth.hasPermission('risk_item.submit')"
:can-review="auth.hasPermission('risk_item.review')"
@submit="submit" @submit="submit"
@select="usePrompt" @select="usePrompt"
@tool="openTool" @tool="openTool"

View File

@ -24,6 +24,10 @@ router.beforeEach(async (to) => {
return { name: "login", query: { redirect: to.fullPath } }; return { name: "login", query: { redirect: to.fullPath } };
} }
const permission = to.meta.permission; const permission = to.meta.permission;
// Refresh the permission snapshot before protected navigation. A role or
// permission changed directly in the database must take effect without
// requiring the user to clear the old browser session first.
if (typeof permission === "string" && auth.token) await auth.restore();
if (typeof permission === "string" && !auth.hasPermission(permission)) if (typeof permission === "string" && !auth.hasPermission(permission))
return { name: "assessment" }; return { name: "assessment" };
return true; return true;