You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何仅对拥有ADMIN权限的登录用户展示删除按钮

实现方案说明

你当前的写法逻辑是完全正确的,符合React下UI权限控制的常规实现思路,仅需补充几个优化和注意点即可:

核心注意事项(必做)

  • 前端的权限控制仅做UI展示层面的拦截,必须在Spring Boot后端的删除接口层做权限校验:所有删除请求到达后端后,都要校验当前登录用户的authority字段是否为ADMIN,校验通过才允许执行删除操作。因为前端代码完全可以被用户手动篡改,绕过UI层面的隐藏逻辑直接调用删除接口,后端校验才是权限控制的最终防线。

前端实现优化建议

  1. 增加空值兼容,避免异常
    当前的判断逻辑如果遇到props.user为undefined/null的场景(比如数据还没加载完成、用户未登录的异常场景),直接取authority会抛出JS运行时错误,建议修改为:
const isAdmin = props.user?.authority === "ADMIN";

如果你的项目不支持可选链语法,可以改为:

const isAdmin = props.user && props.user.authority === "ADMIN";
  1. 权限判断逻辑抽离复用
    如果项目中多处需要用到管理员权限判断,可以把这段逻辑抽成公共工具函数,避免重复编码,也方便后续统一修改(比如后续新增SUPER_ADMIN角色也需要删除权限时,只需修改一处):
// 放到公共utils文件中
export const isAdminUser = (user) => {
  return user?.authority === "ADMIN";
}

// 组件中使用
import { isAdminUser } from '@/utils/auth';
const isAdmin = isAdminUser(props.user);
  1. 复杂场景下可封装权限组件
    如果项目中有大量需要按权限控制展示的模块,可以封装通用的权限组件,让代码更简洁:
// 封装AdminOnly组件
const AdminOnly = ({ user, children }) => {
  const isAdmin = user?.authority === "ADMIN";
  return isAdmin ? children : null;
}

// 业务组件中使用
<AdminOnly user={props.user}>
  <button className="btn btn-secondary tooltips" data-placement="top" data-toggle="tooltip" data-original-title="Delete"><i className="fa fa-times"></i></button>
</AdminOnly>
  1. 删除操作二次校验(可选)
    如果担心用户手动修改DOM渲染出删除按钮触发操作,可以在删除按钮的点击事件中再做一次权限判断,或者直接依赖后端的权限校验即可。

内容的提问来源于stack exchange,提问作者James Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:27:03