news 2026/2/7 7:01:58

前端分角色控制权限

作者头像

张小明

前端开发工程师

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/4 17:40:39

如何快速配置BetterNCM:网易云音乐增强插件的完整安装指南

如何快速配置BetterNCM&#xff1a;网易云音乐增强插件的完整安装指南 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐的功能限制而烦恼吗&#xff1f;BetterNCM作为一…

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

SD-PPP:3分钟解锁Photoshop中的AI绘图超能力

SD-PPP&#xff1a;3分钟解锁Photoshop中的AI绘图超能力 【免费下载链接】sd-ppp Getting/sending picture from/to Photoshop in ComfyUI or SD 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp 还在为AI绘图和Photoshop之间的频繁切换而头疼吗&#xff1f;SD-PPP…

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

如何用LabVIEW在3分钟内控制STM32?开源项目labview-stm32完全指南

如何用LabVIEW在3分钟内控制STM32&#xff1f;开源项目labview-stm32完全指南 【免费下载链接】labview-stm32 项目地址: https://gitcode.com/gh_mirrors/la/labview-stm32 想要快速上手STM32开发却对复杂的C语言代码望而却步&#xff1f;labview-stm32开源项目为你提…

作者头像 李华
网站建设 2026/1/30 15:43:14

小米运动刷步数2025终极指南:免费自动同步微信支付宝

小米运动刷步数2025终极指南&#xff1a;免费自动同步微信支付宝 【免费下载链接】mimotion 小米运动刷步数&#xff08;微信支付宝&#xff09;支持邮箱登录 项目地址: https://gitcode.com/gh_mirrors/mimo/mimotion 小米运动刷步数工具是一款专为Zepp Life用户设计的…

作者头像 李华
网站建设 2026/2/3 7:42:57

蓝牙水控器开源项目深度使用手册

蓝牙水控器开源项目深度使用手册 【免费下载链接】waterctl 深圳市常工电子“蓝牙水控器”控制程序的开源实现。适用于国内各大高校宿舍热水器。 项目地址: https://gitcode.com/gh_mirrors/wa/waterctl 技术架构与核心价值 本项目采用现代化Web技术栈构建&#xff0c;…

作者头像 李华