用户资料门户的构建

1. 需求背景

  1. 老的页面停止维护了,且老旧, 功能单一,且页面分散. 急需做功能集成的平台化建设
  2. 原先的用户资料查询没有做权限管控, 每一次查询都会消耗我们组的人力资源.

2. 项目介绍

2.1. 项目地址

服务地址: [公司内网服务(略)]
工蜂地址: [公司内网仓库(略)]


2.2 项目的价值

  1. 进行平台化建设, 整合用户资料相关的所有功能, 方便使用者能一站式的解决问题
  2. 做好权限管理和管理员管控, 让所有人的查询都有迹可循, 可解放人力资源.
  3. 改造老的功能, 重构老的代码. 让现在的项目拓展性和可维护性更高, 后续交接项目更容易

2.3 项目的痛点

  1. 权限的细腻度划分

在进行权限管控时, 需要考虑到权限的细腻度问题, 往往相同小组中, 一个人需要使用到此功能, 那么小组的其他人大概率也会使用, 那么以小组为单位划分权限呢? 还是以个人为单位划分? 这里考虑到一些特殊情况(如, 某个小组的某个人可能需要管理员身份, 并且以小组为单位更容易信息造假), 所以采用的是以个人为单位划分权限. 不仅如此, 由于UDC/virtual字段众多, 并且有一些隐藏字段, 所以单纯的以人为单位做权限管控还不够, 这里采用的是以人+字段的方式做权限管控, 即: 某个人只能拥有某些字段的权限, 你无法查询到你没有权限的字段的信息(如你拥有20002/20031字段的权限, 但你去查询任意uin的20025字段的信息是会被拦截的

  1. pb调用的动态性

项目中会用到RPC调用拉取用户信息, 用RPC调用就离不开protobuf, 而在当前项目的场景下, 使用普通的.proto文件作为源数据来源显然是不可行的, 主要有以下几点: (1) UDC字段和虚拟字段一共有上千个, 如果要使用.proto文件, 就需要在message中写上千行信息, 并且字段的数量是在不断增加的, 每增加一个字段就需要修改一次.proto文件. (2) 使用者每次查询的字段是动态变化的, 一次RPC调用中只需填使用者需要查询的字段. 基于上诉情况, 不得不抛弃传统的.proto文件作为源数据. 这里使用了protobuf的反射, 在程序运行时通过使用者传来的参数, 动态的构建,proto文件, 将使用者的输入作为源数据.

  1. 面对海量查询时的资源分配问题

在用户信息查询界面, 可以使用导入号码包的功能, 批量的查询uin信息. 一旦号码包中的uin过多(比如百万个), 后端的处理就会很慢. 并且机器资源有限, 不能采用负载均衡等操作来减缓服务器压力. 这里采用注册任务式的异步处理来完成任务, 使用者导入一个号码包来查询时, 主服务会在MySQL插入一条任务信息, 异步服务会串行的执行任务(不使用协程去办法完成任务的原因是, CPU资源有限). 使用者可以在查看任务清单界面, 查询任务的完成情况, 并能导出已完成的任务的数据


2.4 项目的基本使用

2.4.1 项目概览

无极平台
权限管理
自助工具
管理员界面
资料修改系统
查看当前权限
申请字段权限
查看审批进度
用户资料查询
字段ID查询
查看任务清单
自助工具权限审批
权限管理页面
资料修改查询
普通查询
导入号码包查询
UDC字段查询
虚拟字段查询

项目支持的功能:

  • 单uin单field查询
  • 多uin多field查询
  • 导入号码包进行异步查询
  • UDC字段的解释查询
  • 虚拟字段的解释查询
  • 用户资料修改的流水记录查询
  • 管理员功能

2.4.2 使用说明

申请字段权限 --> 管理员通过 --> 使用自助工具

  1. 申请字段权限. 申请后, 请联系neokou/daviadai/hansonliang通过申请. 请一次性申请完你所需要的所有权限, 在已有权限的前提下二次申请, 会将之前已有的权限覆盖. 可以在查看审批进度的页面关注自己的审批流程

在这里插入图片描述

  1. 自助工具的使用. 自助工具分为普通的单uin查询和导入号码包查询两个功能. 单uin的查询是同步的, 而导入号码包的查询是异步的. 使用导入号码包创建任务后, 可以在查看任务清单页面关心任务的进度, 并且可在此页面导出查询结果的文件

注: 由于无极平台发包有大小限制, 导入号码包后若出现卡死, 证明此包已被无极丢弃. 后续会采用新的方案来解决此问题(十万个uin以内能正常工作)


2.5 项目的整体架构

数据源调用
普通查询
号码包查询
数据源调用
数据源调用
任务派发
config API调用
OIDB调用
HTTP调用
数据库交互
数据库交互
本地文件交互
数据库交互
前端页面
权限管理
自助工具
管理员方法
资料修改系统
主服务
权限管理+身份认证
微服务间调用
与MySQL, 本地文件交互
异步服务
企微机器人
七彩石配置中心
用户信息平台
AI智能体
用户权限表
权限申请表
临时的uin和查询结果
异步任务表

3. 项目未来的拓展手段

代码的整体框架:

├── ao(业务逻辑代码)
│   ├── log
│   │   └── trading_handler.go
│   ├── robot
│   │   └── robot_handler.go
│   └── user
│       ├── authority_handler.go
│       ├── table_handler.go
│       └── tool_handler.go
├── async_task(异步服务)
│   ├── ao
│   │   └── rece_handler.go
│   ├── async_servers
│   │   └── servers.go
│   ├── async_task
│   ├── dao
│   │   └── mysql_dao.go
│   ├── main.go
│   ├── repo
│   │   └── processing.go
│   └── trpc_go.yaml
├── config(七彩石配置)
│   └── ── rainbow.go
├── copy(protobuf反射代码)
│   └── copy.go
├── dao(与MySQL和本地文件交互)
│   ├── file
│   │   └── file_dao.go
│   └── mysql
│       └── mysql_dao.go
├── entity(全局变量和实体)
│   └── comm.go
├── go.mod
├── go.sum
├── main.go
├── parse(字符串解析)
│   └── parse.go
├── repo(数据处理方法)
│   ├── log
│   │   └── processing.go
│   ├── robot
│   │   └── processing.go
│   └── user
│       ├── oidb.go
│       └── processing.go
├── servers(不同的路径路由)
│   └── servers_select.go
└── trpc_go.yaml

3.1 数据库的拓展

数据库方法接口
Init()
Querry()
Exec()
CheckTrueOne()
用户权限表
姓名
权限字段
到期时间
...
权限申请表
姓名
申请时间
申请的字段
...
其他表
...

新增数据调用只需在原有的对象基础上, 增加一个你需要的对象. 并且实现接口方法即可


3.2 功能的拓展

现在的项目将日志查询, 用户资料查询, 机器人服务等模块做了解耦合

thttp.HandleFunc("/wxcb", servers.ServHTTPRobot)
thttp.HandleFunc("/wxcb1", servers.ServHTTPSelfTool)
thttp.HandleFunc("/wxcb2", servers.ServHTTPAuthorityManagement)
thttp.HandleFunc("/wxcb3", servers.ServHTTPFrontTable)
thttp.HandleFunc("/wxcb4", servers.ServHTTPQueryJournal)

拓展时只需为新的服务开辟一个路径, 并且在ao(Application Object), repo(Repository)文件中完成它的具体实现即可


3.3 权限管控的拓展

目前在数据库9.146.56.25中, userInfo用于保存所有人的权限. privilege为1代表是普通用户,只有读权限. privilege为3或者4代表管理员. privilege为4代表有查询流水记录的权限. 管理员的field字段都为1,代表有所有字段的查询权限

在这里插入图片描述

后续新增功能的权限管控可以沿用这种形式, 或者对这种方式做改造(代码只需要微调) pri为1代表只有查询用户数据的权限, pri为4代表是管理员, 可以使用所有权限. 目前资料修改的流水查询, 默认只有管理员才能使用, 若后续想要对普通用户开放, 可以自行设置字段, 并且在LOG代码中未改判断条件即可


4. 项目目前还没解决的问题

4.1 查询UDC字段时无中文释义

在这里插入图片描述

UDC字段的中文释义在数据库11.168.177.71中, 由于一些编码问题, select出来是乱码, 目前直接去数据库select中文释义的方案可能行不通. 解决方法: 将数据库的中文释义dump到本地文件中, 然后去本地文件获取中文释义


4.2 无极平台的发包限制

在这里插入图片描述

在使用导入号码包查询信息时, 如果号码包太大, 无极平台会自动拦截你的包, 导致数据传不到我的后端. 解决方法: 使用cos存储服务, 将数据先发到cos上(无极到cos无限制), 然后后端再去cos服务上把数据拉下来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/368460.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​​服务拆分的原则

目录 一、单一职责原则 二、服务自治原则 三、单向依赖 一、单一职责原则 单⼀职责原则原本是面向对象设计中的⼀个基本原则, 它指的是⼀个类应该专注于单⼀功能. 不要存在多于⼀个导致类变更的原因 在微服务架构中, ⼀个微服务也应该只负责⼀个功能或业务领域, 每个服务应该…

2024亚太赛(中文赛)数学建模竞赛选题建议+初步分析

提示&#xff1a;DS C君认为的难度&#xff1a;B<C<A&#xff0c;开放度&#xff1a;C<A<B。 综合评价来看 A题适合有较强计算几何和优化能力的团队&#xff0c;难度较高&#xff0c;但适用面较窄。 B题数据处理和分析为主&#xff0c;适合数据科学背景的团队…

【秋招突围】2024届秋招笔试-科大讯飞笔试题-04-三语言题解(Java/Cpp/Python)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系计划跟新各公司春秋招的笔试题 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f4e7; 清隆这边…

PDM系统中物料分类与编码规则生成方案

在企业管理软件中&#xff0c;PDM系统是企业管理的前端软件&#xff0c;用于管理研发图纸、BOM等数据&#xff0c;然后生成相关物料表或BOM&#xff0c;递交给后端ERP系统进行生产管理。在PDM系统中&#xff0c;有两种方式可以生成物料编码。 1第一种是用户可以通过软件接口将…

Linux学习第54天:Linux WIFI 驱动:蓝星互联

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 数字化、现代化的今天&#xff0c;随处的WIFI给与了大众极大的方便&#xff0c;也感受到了科技的力量。万物互联、无线互联越来越成为一个不可逆转的趋势。现在比较火…

Android EditText的属性与用法

EditText 是编辑框控件&#xff0c;可以接收用户输入&#xff0c;并在程序中对用户输入进行处理。EditText在App里随处可见&#xff0c;在进行搜索、聊天、拨号等需要输入信息的场合&#xff0c;都可以使用 EditText。 图1 编辑框示意图 EditText 是TextView的子类&#xff0c…

华为云盘古大模型5.0将如何促进工业领域的发展?

6月21日&#xff0c;在华为开发者大会2024&#xff08;HDC2024&#xff09;主题演讲环节中&#xff0c;华为常务董事、华为云CEO张平安重磅发布盘古大模型5.0&#xff0c;这一重要技术成果标志着人工智能在工业领域的应用迈出了新的步伐。当前&#xff0c;工业领域正面临着数字…

【ESP32】打造全网最强esp-idf基础教程——15.WiFi连接STA模式

WiFi连接STA模式 一、ESP32的WiFi功能介绍 前面章节内容&#xff0c;基本上都是描述了ESP32强大的MCU能力&#xff0c;这些MCU能力使得ESP32可以替换许多类型的单片机工作&#xff0c;而自己承担这部分功能&#xff1b;当然ESP32的IOT能力才是它的主业&#xff0c;从硬件配置来…

关于软件本地化,您应该了解什么?

软件本地化是调整软件应用程序以满足目标市场的语言、文化和技术要求的过程。它不仅仅涉及翻译用户界面&#xff1b;它包含一系列活动&#xff0c;以确保软件在目标语言环境中可用且相关。以下是您应该了解的有关软件本地化的一些关键方面&#xff1a; 了解范围 软件本地化是…

阳光倒灌试验太阳辐射系统日光模拟器

太阳光模拟器概述 太阳光模拟器是一种能在实验室环境下模拟太阳光照射特性的设备&#xff0c;广泛应用于材料科学、能源研究、环境科学等领域。通过模拟太阳光的光谱分布和辐射强度&#xff0c;太阳光模拟器可以为科研和工业提供稳定且可重复的光照条件&#xff0c;进而对材料…

人工智能|深度学习——多模态条件机制 Cross Attention 原理及实现

一、引入 虽然之前写过 Attention 的文章&#xff0c;但现在回头看之前写的一些文章&#xff0c;感觉都好啰嗦&#xff0c;正好下一篇要写的 Stable Diffusion 中有 cross-attention&#xff0c;索性就再单拎出来简单说一下 Attention 吧&#xff0c;那么这篇文章的作用有两个&…

46. 全排列

计算数组的全排列 给定一个不含重复数字的数组 nums&#xff0c;返回其所有可能的全排列。你可以按任意顺序返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2&#xff1a; 输入&a…

护网蓝队面试

一、sql注入分类 **原理&#xff1a;**没有对用户输入项进行验证和处理直接拼接到查询语句中 查询语句中插⼊恶意SQL代码传递后台sql服务器分析执行 **从注入参数类型分&#xff1a;**数字型注入、字符型注入 **从注入效果分&#xff1a;**报错注入、布尔注入、延时注入、联…

day04-组织架构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.组织架构-树组件应用树形组件-用层级结构展示信息&#xff0c;可展开或折叠。 2.组织架构-树组件自定义结构3.组织架构-获取组织架构数据4.组织架构-递归转化树形…

02-部署LVS-DR群集

1.LVS-DR工作原理 LVS-DR模式&#xff0c;Director Server作为群集的访问入口&#xff0c;不作为网购使用&#xff0c;节点Director Server 与 Real Server 需要在同一个网络中&#xff0c;返回给客户端的数据不需要经过Director Server 为了响应对整个群集的访问&#xff0c;…

Docker镜像加速配置

由于当前运营商网络问题&#xff0c;可能会导致您拉取 Docker Hub 镜像变慢&#xff0c;索引可以配置阿里云镜像加速器。阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 每个人镜像地址都不一样&#xff0c;需要登陆阿里云自行查看&#xff0c;地址在上面&a…

llama-factory训练RLHF-PPO模型

理论上RLHF&#xff08;强化学习&#xff09;效果比sft好&#xff0c;也更难训练。ppo有采用阶段,步骤比较多,训练速度很慢. 记录下工作中使用llama-factory调试rlhf-ppo算法流程及参数配置,希望对大家有所帮助. llama-factory版本: 0.8.2 一 rlhf流程 ppo训练流程图如下, 会…

油猴Safari浏览器插件:Tampermonkey for Mac 下载

Tampermonkey 是一个强大的浏览器扩展&#xff0c;用于运行用户脚本&#xff0c;这些脚本可以自定义和增强网页的功能。它允许用户在网页上执行各种自动化任务&#xff0c;比如自动填写表单、移除广告、改变页面布局等。适用浏览器&#xff1a; Tampermonkey 适用于多数主流浏览…

Golang | Leetcode Golang题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; func rangeBitwiseAnd(m int, n int) int {for m < n {n & (n - 1)}return n }

二叉树与堆相关的时间复杂度问题

目录 满二叉树与完全二叉树高度h和树中节点个数N的关系 向上调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向下调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向上调整建堆&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a;…