当前位置: 首页 > news >正文

前端分角色控制权限

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

项目权限控制机制

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,后端保证安全性。

http://www.cnnetsun.cn/news/190825.html

相关文章:

  • WorkshopDL完整教程:零基础掌握Steam创意工坊下载技巧
  • BetterNCM插件使用全攻略:解锁网易云音乐隐藏功能
  • 3个技巧轻松解决图像标签管理工具的界面显示问题
  • WaveTools鸣潮工具箱终极指南:3大核心功能快速提升游戏体验
  • SD-PPP:让Photoshop拥有AI绘画能力的完整指南
  • BlenderKit实战宝典:3D创作效率倍增的秘诀
  • 革命性突破:零基础掌握SD-PPP实现Photoshop与AI绘图的无缝融合
  • springboot基于vue的一鸣企业员工人事考勤工资管理系统的设计与实现_cg88z7k0
  • NSC_BUILDER终极指南:掌握Switch文件管理的全能工具
  • springboot基于vue的动漫服装租赁妆造服务平台的设计与实践 _8a6262a0
  • 【电力系统】大规模新能源并网下的火电机组深度调峰经济调度附Matlab代码和论文
  • 5步掌握Audiveris:从乐谱图片到数字音乐的终极指南
  • 原神祈愿记录终极导出教程:5分钟搞定你的抽卡数据分析
  • Hidden Bar:Mac菜单栏终极清理指南,5分钟告别拥挤烦恼![特殊字符]
  • 文档下载革命:kill-doc工具5大核心技巧彻底告别繁琐流程
  • 如何快速实现Figma到After Effects转换:设计师必备的AEUX插件使用指南
  • 突破传统边界:用LabVIEW颠覆STM32开发的革命性实践
  • RS485偏置电阻配置方法:保证空闲状态通俗解释
  • 革命性AI绘图与Photoshop高效协作解决方案
  • LRC歌词制作工具:3分钟掌握专业级歌词同步技术
  • FF14动画跳过插件终极指南:告别重复副本动画
  • Switch文件管理终极指南:NSC_BUILDER完全操作手册
  • 8746253
  • 2025终极指南:B站抽奖自动化助手,高效提升中奖率的实战手册
  • 通过虚拟串口软件简化设备调试流程:实用技巧
  • Switch大气层系统完整教程:从零配置到专业优化
  • Figma中文插件终极指南:设计师必备的界面翻译解决方案
  • FigmaCN终极指南:如何让专业设计工具说中文
  • Koalageddon终极指南:5步解锁全平台游戏DLC的完整教程
  • LeagueSkinChanger完全指南:轻松实现英雄联盟皮肤自由