前端权限控制需路由级(动态生成/拦截)、组件级(指令/组件控制)和状态管理(存储更新)三层协同,但不能替代后端校验。
前端权限控制不能替代后端校验,但能提升用户体验和安全性。核心思路是:路由加载前检查用户角色/权限,动态生成或拦截路由,配合组件级权限判断。
在路由配置中添加元信息(meta),标识该路由所需的权限。例如:
示例(Vue Router):routes.js
{ path: '/admin', component: Admin, meta: { requiresAuth: true, roles: ['admin'] } }{ path: '/user/profile', component: Profile, meta: { requiresAuth: true, permissions: ['user:read'] } }全局前置守卫中读取用户登录状态和权限数据,对比路由 meta 判断是否放行:
用户登录后,后端返回其可访问的菜单和路由配置(或权限标识),前端据此过滤并生成最终路由表:
/api/user/perms 获取权限列表;meta.permissions 或 meta.roles;router.addRoute() 动态添加;路由层拦截后,页面中按钮、操作项仍需二次控制,防止用户手动修改 DOM 或调用 API:
v-permission 指令(Vue)或 PermissionGate 组件(React);'order:delete'),内部比对当前用户权限数组;权限数据需可靠存储,并支持变更后及时响应:
(如 5 分钟有效期)。