news 2026/4/15 7:11:27

前端分角色控制权限

作者头像

张小明

前端开发工程师

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/4/3 4:47:31

ComfyUI-Manager性能优化指南:3大技巧让老旧设备流畅运行AI创作

ComfyUI-Manager性能优化指南&#xff1a;3大技巧让老旧设备流畅运行AI创作 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager 还在为老旧电脑运行ComfyUI时的卡顿、崩溃而烦恼吗&#xff1f;作为ComfyUI的官方管理工具&…

作者头像 李华
网站建设 2026/4/10 22:27:39

蓝牙水控器终极指南:打造校园热水自由的开源方案

蓝牙水控器作为校园生活中的关键设备&#xff0c;其开源方案为用户提供了前所未有的离线控制和隐私保护能力。本指南将带您深入了解这款跨平台安装的解决方案&#xff0c;让您轻松掌握校园热水系统的管理能力。 【免费下载链接】waterctl 深圳市常工电子“蓝牙水控器”控制程序…

作者头像 李华
网站建设 2026/4/11 5:19:50

XUnity.AutoTranslator:Unity游戏全球化智能翻译解决方案

XUnity.AutoTranslator&#xff1a;Unity游戏全球化智能翻译解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 在游戏出海浪潮中&#xff0c;语言障碍成为众多开发者的首要挑战。XUnity.AutoTransl…

作者头像 李华
网站建设 2026/4/11 20:25:56

戴尔服务器风扇控制工具:简单易用的噪音管理解决方案

戴尔服务器风扇控制工具&#xff1a;简单易用的噪音管理解决方案 【免费下载链接】dell_fans_controller A tool for control the Dell server fans speed, it sends the control instruction by ipmitool over LAN for Windows, it is a GUI application built by C# WinForm …

作者头像 李华
网站建设 2026/4/11 7:47:25

Unity游戏全球化革命:智能翻译引擎打破语言边界

Unity游戏全球化革命&#xff1a;智能翻译引擎打破语言边界 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为游戏出海的语言障碍而烦恼吗&#xff1f;面对全球市场的巨大潜力&#xff0c;语言本地化…

作者头像 李华
网站建设 2026/4/10 13:32:51

3分钟掌握鸣潮工具箱:5个隐藏功能让你的游戏体验大升级

3分钟掌握鸣潮工具箱&#xff1a;5个隐藏功能让你的游戏体验大升级 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为《鸣潮》卡顿、画质不佳而烦恼吗&#xff1f;鸣潮工具箱作为一款专业的游戏优化软…

作者头像 李华