news 2026/7/7 16:11:05

前端分角色控制权限

作者头像

张小明

前端开发工程师

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/7/7 18:44:31

BlenderKit插件深度应用:从入门到精通的效率革命

BlenderKit插件深度应用&#xff1a;从入门到精通的效率革命 【免费下载链接】BlenderKit Official BlenderKit add-on for Blender 3D. Documentation: https://github.com/BlenderKit/blenderkit/wiki 项目地址: https://gitcode.com/gh_mirrors/bl/BlenderKit 在3D创…

作者头像 李华
网站建设 2026/7/7 18:19:28

快速了解VIT模型

ViT&#xff08;Vision Transformer&#xff09;是计算机视觉领域的一场「范式革命」——它首次证明&#xff1a;纯 Transformer 架构不依赖卷积操作&#xff0c;仅靠注意力机制&#xff0c;就能在图像识别任务上达到甚至超越 CNN 的性能。该模型由 Google Research 团队于 202…

作者头像 李华
网站建设 2026/7/7 21:03:07

AEUX实战指南:从Figma设计到AE动画的完整工作流

AEUX实战指南&#xff1a;从Figma设计到AE动画的完整工作流 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 你是否曾经为了将精美的Figma设计转换为After Effects动画而苦恼&#xff1f…

作者头像 李华
网站建设 2026/7/7 0:26:23

电商数据监控实战:从手动刷屏到智能预警的进化之路

电商数据监控实战&#xff1a;从手动刷屏到智能预警的进化之路 【免费下载链接】idlefish_xianyu_spider-crawler-sender 闲鱼自动抓取/筛选/发送系统&#xff0c;xianyu spider crawler blablabla 项目地址: https://gitcode.com/gh_mirrors/id/idlefish_xianyu_spider-craw…

作者头像 李华
网站建设 2026/7/6 15:33:26

小米运动步数自动化同步终极指南:免费智能修改微信支付宝数据

小米运动步数自动化同步终极指南&#xff1a;免费智能修改微信支付宝数据 【免费下载链接】mimotion 小米运动刷步数&#xff08;微信支付宝&#xff09;支持邮箱登录 项目地址: https://gitcode.com/gh_mirrors/mimo/mimotion 还在为每天运动步数不够而烦恼吗&#xff…

作者头像 李华
网站建设 2026/7/7 15:29:19

5分钟学会:一键转换网页图片格式的终极解决方案

5分钟学会&#xff1a;一键转换网页图片格式的终极解决方案 【免费下载链接】Save-Image-as-Type Save Image as Type is an chrome extension which add Save as PNG / JPG / WebP to the context menu of image. 项目地址: https://gitcode.com/gh_mirrors/sa/Save-Image-a…

作者头像 李华