gorbac鉴权登录

发布于:2025-07-23 ⋅ 阅读:(19) ⋅ 点赞:(0)

Flutter

  1. 用户登录之后,通过后端获取当前用户的角色&权限列表,根据所有权限判断是否展示页面中的某些按钮(可跳转到相应页面)。

Golang

  1. 所有的接口都要绑定所需权限permission string,除了登录,获取当前登录的用户信息,动态菜单或页面展示控制
类型 说明
登录 通常放行,不验证权限(只验证身份JWT
获取当前登录用户信息 用于前端展示,不做权限限制

动态菜单或页面展示控制:登录后返回“用户拥有的权限集”,由前端根据权限判断决定显示什么页面、按钮
|–本质上是前端展示逻辑,但必须由后端控制
|–要控制每个角色权限范围内能看到的菜单以及页面
|–所以,后端要根据用户角色返回一个菜单结构树给前端–>前端根据这个结构展示不同的页面入口

  1. 🚀 性能优化建议
    即使“每个接口都鉴权”,仍然可以做到高性能运行,前提是:
优化点
✅ JWT 解码用高效库(如 github.com/golang-jwt/jwt/v5) 解码+校验快
✅ gorbac 结构在程序启动时加载,不用每次查库 全部在内存中
✅ 权限中间件结构简洁 只做角色-权限的判断
数据读取按需分页 避免一次读太多
✅ 可设置 JWT 缓存时间长一点(如 2 小时) 减少重新登录频率
  1. RBAC 角色划分

  • 管理员角色 - admin(系统超级管理员,拥有所有权限)

  • 主管角色 - manager - [部门代码]_manager(管理本部门所有工序及操作员)

    角色名 对应部门
    dye_manager 印染部门
    strap_manager 拉带部门
    fixture_manager 装夹部门
    qc_manager 检验部门
    无主管,只有操作员operator 打包部门
  • 操作员角色 - operator - [部门代码]_[工序代码]_operator / [部门代码]_operator(仅限本工序的操作权限)
    ①印染部门(dye)

    角色名 对应工序
    dye_calender_operator 压光工序
    dye_lamination_operator 覆膜工序
    dye_printing_operator 印染工序
    dye_fabric_check_operator 验布工序
    dye_cutting_operator 分切工序

    ②拉带部门(strap) —无工序划分

    角色名 说明
    strap_operator 拉带部门统一操作员

    ③装夹部门(fixture)

    角色名 对应工序
    fixture_assembly_operator 装夹整理工序
    fixture_heat_operator 加热工序(平台&烘箱)

    ④检验部门(qc)

    角色名 对应工序
    qc_inspection_operator 检验工序
    qc_repair_operator 检修工序

    ⑤打包部门(pack) —无工序划分

    角色名 说明
    pack_operator 打包部门统一操作员
  1. Token

GET /api/workorders?process=印染&status=unassigned
Authorization: Bearer <JWT>

| 【前端】用户输入账号密码 → 发送 /login → 后端验证成功,返回 JWT
↓ 【前端】保存 JWT
↓ 【前端】每次访问 /api/xxx 时加上 Authorization: Bearer
↓ 【后端】中间件解析 JWT,知道你是谁、有什么权限
↓ 【后端】返回你该看到的工单数据

  1. 接口设计

  • 对于工单信息的访问接口权限控制:
    路径 说明 权限
    GET /api/orders/my-status 当前登录用户自己的工单状态 登录状态(无RBAC)
    GET /api/orders/group-status 当前用户所在组内的所有工单状态(主管用) 需RBAC权限
    GET /api/orders/all-status 所有部门所有工单状态(管理员或调度员使用) 管理员级 RBAC 权限
  1. 项目结构

├ MES/
├── cmd/
│   └── main.go                 # 项目启动入口,只负责初始化服务和加载路由(保持极简)
│
├── internal/                  # 项目内部业务模块,分层结构,禁止外部直接访问(Go module机制)
│   ├── auth/
│   │   └── middleware.go       # 鉴权中间件,负责JWT身份认证 + RBAC权限控制
│   │
│   ├── admin/
│   │   └── user_handler.go     # 管理员接口实现,如添加用户、修改角色、重置密码等
│   │
│   ├── model/
│   │   └── user.go             # 用户结构体定义(GORM模型)+ JSON映射标签
│   │                           # 可包含基本校验、表名绑定、字段约束等
│   │
│   ├── repo/
│   │   └── user_repo.go        # 用户相关的数据访问层,封装具体的数据库操作逻辑(如增删改查)
│   │                           # 与业务逻辑解耦,便于复用与单元测试
│   │
│   ├── rbac/
│   │   └── loader.go           # 角色权限配置加载(从JSON/数据库/硬编码加载角色权限映射)
│   │                           # 用于初始化 gorbac 权限模型
│   │
│   ├── db/
│   │   └── mysql.go            # 数据库连接初始化(GORM配置、连接池、日志、错误处理等)
│   │                           # 通常在 main 中初始化一次,供全局使用
│   │
│   └── router/                 # 所有路由的集中注册(推荐拆分各模块路由并集中注册)
│       └── router.go           # 统一管理各模块的路由挂载,避免 main.go 路由混乱
│
├── config/
│   └── config.go               # 应用配置加载(支持YAML、JSON、env等)# 存储数据库连接信息、JWT密钥、端口号等
│
├── utils/
│   └── jwt.go                  # 工具类函数(如生成/解析JWT、加密、字符串处理等)
│
├── go.mod                     # Go模块管理文件,声明项目依赖和模块名
├── go.sum                     # 依赖校验和文件,确保构建一致性
  1. MES需求分析

    🔐 登录与权限控制

    登录方式:普通用户通过手机号 + 密码登录。

    注册方式:普通用户不能注册,只能由管理员添加用户。

    登录认证:使用 JWT 进行身份鉴权,登录成功后返回 Token。

    权限验证:集成 gorbac 控制角色权限,自动加载权限配置。

    🧑‍💼 用户管理(管理员操作)

    添加用户:管理员可以创建用户并设定角色。

    修改用户:管理员可以修改用户名、角色、状态等信息。

    删除用户:管理员可以禁用或删除普通用户账号。

    重置密码:管理员可以为用户重置密码。

    🛡️ 角色与权限管理(管理员操作)

    角色配置:管理员可以新增、编辑、删除角色。

    权限配置:为每个角色配置具体的权限(资源名 + 动作)。

    gorbac 自动加载角色权限配置:从数据库或配置文件加载。

    📦 项目结构(Go 后端)

    按角色模块划分(如 admin/manager/operator)

    JWT 登录、认证中间件模块

    RBAC 权限加载与判断模块

    User、Role、Permission 的数据库模型

    MySQL 数据库初始化脚本

    🌐 前端(Flutter)

    登录页:手机号 + 密码登录

    权限控制:根据用户权限动态展示页面组件(页面级控制)

    用户管理页面:显示用户列表 + 新增用户 + 修改角色权限等功能

    角色权限配置页:角色列表 + 权限勾选界面


网站公告

今日签到

点亮在社区的每一天
去签到