标准答案
- 前端可以根据用户角色、权限点或策略结果控制路由访问、菜单显示、按钮可用性和页面提示。
- 隐藏按钮不等于没有权限,因为用户仍可能通过接口、控制台、构造请求或直接访问路由绕过页面。
- 服务端必须对每个敏感接口做鉴权和授权校验,不能信任前端传来的权限状态。
- 权限模型要区分认证、授权、角色、权限点、数据范围和资源归属。
- 前端还要处理权限变更后的缓存刷新、路由重定向、403 状态和空权限页面。
题目解析
这道题核心是安全边界。前端代码运行在用户设备上,不能把隐藏 UI 当成权限控制的最终保障。
页面层权限和接口层权限应该互相配合:前端减少无效入口,后端保证越权请求失败。
复杂系统里还要考虑数据权限,例如只能看自己部门或自己创建的数据。
代码示例
前端可以用权限点控制按钮显示,但接口仍然必须在服务端校验。
JavaScript
function can(permission, user) {
return user.permissions.includes(permission)
}
if (can('order:delete', currentUser)) {
renderDeleteButton()
}常见误区
- 只隐藏按钮,不做服务端接口授权。
- 把角色名写死在组件里,后续权限模型变化时全站散落修改。
- 只处理菜单权限,不处理直接输入 URL、接口 403 和数据范围。