权限系统怎么做

先理解原理和示例,再练习完整口述与追问。

区分菜单、路由、按钮和数据权限。前端负责展示和导航,后端校验真实权限;隐藏按钮不构成安全边界。考虑刷新恢复、直接访问地址、角色切换及无权限页面。

认证回答“你是谁”,授权回答“你可以操作什么”。菜单、路由、按钮属于前端交互层,数据行与字段权限需要服务端执行。刷新页面时权限尚未加载,应有初始化状态,不能先跳 404 再补动态路由。角色切换还会让之前缓存的列表、用户信息和路由失效,需要一起清理,避免从旧角色页面看见不应展示的数据。

以订单删除为例:前端没有 delete 权限时隐藏或禁用按钮;直接输入详情地址时路由守卫判断访问权;即使用开发工具自己发送 DELETE,请求也必须在服务端被拒绝。菜单和接口返回权限发生冲突时展示 403 并核对权限版本,不能通过前端补一个布尔值假装授权成功。

不要只在 beforeEach 判断 localStorage 中有没有 token。前端状态可修改,token 也可能过期;权限结果不应跨账号共用长期缓存。

权限我分菜单、路由、按钮和数据四层。前端根据当前权限控制展示和导航,真实数据访问与写操作由服务端校验。登录恢复后先加载用户与权限,再注册需要的动态路由并继续原目标;直接输入受限地址也必须被守卫或服务端拒绝。退出和切换角色时清理相关状态与路由。403 说明权限不足,不应简单当成登录过期反复刷新 token。

面试官可能继续问追问与完整解答展开收起

动态路由什么时候加载?退出登录怎么清掉旧权限?菜单可见但接口无权怎么办?

登录恢复并拿到权限后注册动态路由,再继续原目标;退出时移除对应路由记录并清空状态,Router3 旧版本可用重建 matcher 等版本适用方式,不能硬套 Router4 API。菜单可见而接口返回 403 时展示权限错误并刷新或核对权限,不伪造成功,也不反复刷新 token。