# 权限控制详细配置 ## 权限模式 ### 前端访问控制(frontend) 路由权限在前端固定配置,适合角色较固定的系统。 ```ts // preferences.ts export const overridesPreferences = defineOverridesPreferences({ app: { accessMode: 'frontend', }, }); // 路由配置 { meta: { authority: ['super', 'admin'], // 指定角色 }, } // 登录时设置用户角色 authStore.setUserInfo({ ...userInfo, roles: ['super', 'admin'], // 必须是数组 }); ``` ### 后端访问控制(backend) 通过接口动态生成路由表。 ```ts // preferences.ts export const overridesPreferences = defineOverridesPreferences({ app: { accessMode: 'backend', }, }); // src/router/access.ts async function generateAccess(options: GenerateMenuAndRoutesOptions) { return await generateAccessible(preferences.app.accessMode, { fetchMenuListAsync: async () => { return await getAllMenus(); // 后端返回菜单数据 }, }); } ``` 后端菜单数据格式: ```ts const menus = [ { name: 'Dashboard', path: '/dashboard', component: '/dashboard/index', // 视图路径 meta: { title: '仪表盘', icon: 'mdi:view-dashboard', noBasicLayout: false, // 是否不使用基础布局 }, }, ]; ``` ### 混合访问控制(mixed) 同时使用前端和后端权限控制。 ```ts export const overridesPreferences = defineOverridesPreferences({ app: { accessMode: 'mixed', }, }); ``` ## 按钮权限控制 ### 获取权限码 ```ts // src/store/auth.ts const accessCodes = await getAccessCodes(); accessStore.setAccessCodes(accessCodes); // 返回格式: ['AC_100100', 'AC_100110', 'AC_100120'] ``` ### 组件方式 ```vue ``` ### API 方式 ```vue ``` ### 指令方式 ```vue ``` ## 菜单可见但禁止访问 ```ts { meta: { menuVisibleWithForbidden: true, // 菜单可见,访问跳转403 }, } ```