news 2026/2/9 6:02:43

前端分角色控制权限

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端分角色控制权限

查看权限控制机制和这两个函数的使用位置:

项目权限控制机制

1. 角色定义

后端模型(internal/models/user.go):

const(RoleAdmin Role=1// 管理员RoleViewer Role=0// 查看者)

前端类型(web/src/util/auth.ts):

  • role: number-0= Viewer,1= Admin

2. 后端权限控制

JWT Token 生成 (pkg/middleware/auth.go)

登录时生成 token,包含:

  • user_id,email,name,role,exp
中间件

AuthRequired()- 身份验证

  • Authorizationheader 读取 token
  • 解析 JWT,提取user_id/email/name/role存入gin.Context
  • 无效 token 返回 401

AdminRequired()- 管理员权限

  • 检查role是否为1
  • 不是管理员返回 401
路由应用示例
// routes/testcase.gor.Use(authMiddleware.AuthRequired())// 整个组需要登录r.POST("/add",middleware.AdminRequired(),view.AddTestCase)// 特定接口需要管理员// routes/testplan.gor.Use(authMiddleware.AuthRequired())r.Use(middleware.AdminRequired())// 整个组都需要管理员

3. 前端权限控制

getUserInfoFromToken()- 解析用户信息

实现逻辑:

exportfunctiongetUserInfoFromToken():UserInfo|null{consttoken=localStorage.getItem('token');if(!token)returnnull;try{constdecoded:any=jwtDecode(token);return{user_id:Number(decoded.user_id),email:decoded.email,name:decoded.name,role:Number(decoded.role),// 0 或 1};}catch{return{user_id:0,email:'guest',name:'guest',role:0};}}

使用位置:

  1. Layout.tsx(第20行) - 显示用户名和角色标签
  2. TestCaseDetail.tsx(第55/110/174行) - 获取当前用户信息
  3. OwnerSelector.tsx(第26行) - 设置默认 owner
getUserRole()- 获取角色

实现逻辑:

exportfunctiongetUserRole():number{constinfo=getUserInfoFromToken();returninfo?.role??0;// 默认返回 0 (Viewer)}

使用位置:

  1. TestCaseList.tsx(第73行) - 控制删除/编辑按钮显示
  2. ComponentList.tsx(第36行) - 页面级权限检查
  3. TestPlan.tsx(第13行) - 控制功能可见性
  4. TagList.tsx(第52行) - 控制创建/编辑按钮

4. 前端权限控制示例

示例1: 菜单显示 (Layout.tsx)
constuserRole=userInfo?.role??0;constmenuItems=[{key:'/',icon:<FileTextOutlined/>,label:'Test Cases'},...(userRole===1?[// 只有管理员才显示 Test Plans{key:'/testplan',icon:<ProjectOutlined/>,label:'Test Plans'},]:[])];
示例2: 页面级权限检查 (ComponentList.tsx)
constrole=getUserRole();useEffect(()=>{if(role!==1){message.error('You do not have permission to access component management');navigate('/');return;}},[role]);
示例3: 按钮显示控制 (TestCaseList.tsx)
constrole=getUserRole();// 在渲染时根据 role 控制按钮显示{role===1&&(<Button onClick={handleDelete}>Delete</Button>)}

5. 权限控制流程图

用户登录 ↓ 后端生成 JWT (包含 role) ↓ 前端存储 token 到 localStorage ↓ 前端调用 getUserInfoFromToken() 解析 token ↓ 根据 role 控制 UI 显示/隐藏 ↓ API 请求时携带 token ↓ 后端 AuthRequired() 验证身份 ↓ 后端 AdminRequired() 检查 role === 1 ↓ 允许/拒绝请求

6. 权限控制总结

层级控制方式位置
后端路由级AuthRequired()+AdminRequired()routes/*.go
后端接口级AdminRequired()中间件特定路由
前端页面级getUserRole()检查 + 跳转useEffect
前端组件级role === 1条件渲染JSX
前端菜单级userRole === 1动态菜单Layout.tsx

7. 关键函数使用统计

  • getUserInfoFromToken(): 5 处使用

    • Layout (显示用户信息)
    • TestCaseDetail (3处,获取用户信息)
    • OwnerSelector (设置默认值)
  • getUserRole(): 4 处使用

    • TestCaseList (按钮控制)
    • ComponentList (页面权限)
    • TestPlan (功能控制)
    • TagList (按钮控制)

该设计采用前后端双重校验:前端控制 UI,后端保证安全性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/2 16:43:01

【mm_struct 与 vm_area_struct 关系详解】

好的&#xff0c;这两个是 Linux 内核内存管理中最核心的数据结构。它们共同描述了进程的虚拟地址空间。 简单来说&#xff0c;它们的关系是 “总经理”和“部门经理” 的关系&#xff1a; mm_struct&#xff1a;像一个公司的 “总经理”&#xff0c;它掌管着整个进程的虚拟内存…

作者头像 李华
网站建设 2026/2/6 0:44:12

鸣潮120帧解锁新攻略:从困惑到流畅的完整指南

鸣潮120帧解锁新攻略&#xff1a;从困惑到流畅的完整指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你是否在鸣潮1.2版本更新后&#xff0c;发现原本丝滑的120帧游戏体验突然"消失"了&…

作者头像 李华
网站建设 2026/2/6 5:09:54

WaveTools鸣潮工具箱:5分钟学会120帧解锁与画质优化终极指南

WaveTools鸣潮工具箱&#xff1a;5分钟学会120帧解锁与画质优化终极指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools鸣潮工具箱是专门为《鸣潮》玩家打造的一款实用工具&#xff0c;能够轻松…

作者头像 李华
网站建设 2026/2/8 5:59:52

中山大学LaTeX论文模板全攻略:3分钟上手,告别格式烦恼

中山大学LaTeX论文模板全攻略&#xff1a;3分钟上手&#xff0c;告别格式烦恼 【免费下载链接】sysu-thesis 中山大学 LaTeX 论文项目模板 项目地址: https://gitcode.com/gh_mirrors/sy/sysu-thesis 还在为论文格式要求抓狂吗&#xff1f;封面信息填了又改&#xff0c;…

作者头像 李华
网站建设 2026/2/4 20:38:38

流-为序列化解释

流&#xff08;Stream&#xff09;是什么&#xff1f;流&#xff08;Stream&#xff09;是 Java 中用来处理输入和输出&#xff08;I/O&#xff09;操作的基本抽象&#xff0c;它可以用来读取和写入数据。流分为两种&#xff1a;字节流&#xff08;Byte Stream&#xff09;&…

作者头像 李华
网站建设 2026/2/4 20:19:28

鸣潮工具箱3大隐藏玩法揭秘:让你的游戏体验直线飙升!

鸣潮工具箱3大隐藏玩法揭秘&#xff1a;让你的游戏体验直线飙升&#xff01; 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你知道吗&#xff1f;大多数玩家只用了鸣潮工具箱不到30%的功能&#xff01;今…

作者头像 李华