标准答案

  1. 前端可以根据用户角色、权限点或策略结果控制路由访问、菜单显示、按钮可用性和页面提示。
  2. 隐藏按钮不等于没有权限,因为用户仍可能通过接口、控制台、构造请求或直接访问路由绕过页面。
  3. 服务端必须对每个敏感接口做鉴权和授权校验,不能信任前端传来的权限状态。
  4. 权限模型要区分认证、授权、角色、权限点、数据范围和资源归属。
  5. 前端还要处理权限变更后的缓存刷新、路由重定向、403 状态和空权限页面。

题目解析

这道题核心是安全边界。前端代码运行在用户设备上,不能把隐藏 UI 当成权限控制的最终保障。

页面层权限和接口层权限应该互相配合:前端减少无效入口,后端保证越权请求失败。

复杂系统里还要考虑数据权限,例如只能看自己部门或自己创建的数据。

代码示例

前端可以用权限点控制按钮显示,但接口仍然必须在服务端校验。

JavaScript
function can(permission, user) {
  return user.permissions.includes(permission)
}

if (can('order:delete', currentUser)) {
  renderDeleteButton()
}

常见误区

  • 只隐藏按钮,不做服务端接口授权。
  • 把角色名写死在组件里,后续权限模型变化时全站散落修改。
  • 只处理菜单权限,不处理直接输入 URL、接口 403 和数据范围。

作者信息