用户资料门户的构建

news2024/12/22 22:08:03

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.coloradmin.cn/o/1893948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

女性经济崛起,天润融通用客户感知挖掘市场潜力

每逢一年一度的国际妇女节,“女性”话题都会被郑重地讨论。 从消费市场上来说,最近几年女性群体正在拥有越来越大的影响力,甚至出现了“她经济”这样的专属词汇在最近几年被市场反复讨论。 毫无疑问,女性消费群体的崛起已经成为…

揭秘品牌成功秘诀:品牌营销策略的核心要素大公开

品牌营销作为企业战略中至关重要的一环,其核心是建立和传播品牌的独特魅力,使其在消费者心目中占据重要位置。 一个成功的品牌营销策略能够提升品牌的知名度和影响力,带来持续的销售和忠诚客户群体。 在当今竞争激烈的市场环境中&#xff0…

Prompt的万能公式和优化技巧

文章目录 前言一、万能公式二、优化技巧1.设定角色2.设定目标和动机3.引导主观回答4.预设条件5.做强调6.思维链(COT)7.巧用定界符 前言 随着LLM的发展,能给我们带来很多方便,但是又引出了一个新的问题就是我们该如何使用他们&…

明星代言方式8种助力品牌占领市场-华媒舍

1. 明星代言的重要性和市场价值 明星代言是一种常见的品牌推广方式,通过联系知名度高的明星来推广产品或服务,从而提升品牌的知名度和美誉度。明星代言能够借助明星的影响力和粉丝基础,将品牌信息传达给更广泛的受众,从而提高销量…

【数据结构】建堆的时间复杂度

一.向下调整建堆 1.二叉树层数与总节点个数关系 层数一定时,在二叉树节点个数最大的情况下,二叉树为满二叉树,如下图所示,可以清晰地看到在满二叉树中第h层有2^(h-1)个节点,总节点N就等于一个等比数列的求和&#xf…

【Python机器学习】模型评估与改进——在模型选择中使用评估指标

我们通常希望,在使用GridSearchCV或cross_val_score进行模型选择时能够使用AUC等指标。scikit-learn提供了一种非常简单的实现方法,那就是scoring参数,它可以同时用于GridSearchCV和cross_val_score。你只需要提供一个字符串,用于…

RabbitMQ入门教程(精细版二带图)

目录 六 RabbitMQ工作模式 6.1Hello World简单模式 6.1.1 什么是简单模式 6.1.2 RabbitMQ管理界面操作 6.1.3 生产者代码 6.1.4 消费者代码 6.2 Work queues工作队列模式 6.2.1 什么是工作队列模式 6.2.2 RabbitMQ管理界面操作 6.2.3 生产者代码 6.2.4 消费者代码 …

谷粒商城学习-06-使用vagrant快速创建linux虚拟机

这一节的内容是在Windows上安装虚拟机。 为什么要按照虚拟机呢? 原因是很多软件只能在Linux下运行,有的虽然也可以在Windows上运行,但从安装到运行会遇到很多问题,为这些解决这些问题花时间对于大多数人特别是初学者是没有什么价…

WPS操作技巧:制作可以打对勾的方框,只需简单几步!沈阳wps办公软件培训

日常工作中,我们经常需要在表格中添加复选框,比如【性别选择】、【任务完成状态】等等,通过打对勾来确定状态。今天就分别从WPS的Excel表格和Word文档2种场景,介绍制作可以打对勾的复选框的方法技巧,掌握技巧&#xff…

k8s-第十节-Ingress

Ingress 介绍 Ingress 为外部访问集群提供了一个 统一 入口,避免了对外暴露集群端口;功能类似 Nginx,可以根据域名、路径把请求转发到不同的 Service。可以配置 https跟 LoadBalancer 有什么区别? `LoadBalancer`` 需要对外暴露端口,不安全;无法根据域名、路径转发流量到…

Linux之文本三剑客

Linux之三剑客 Linux的三个命令,主要是用来处理文本,grep,sed,awk,处理日志的时候使用的非常多 1 grep 对文本的内容进行查找 1) 基础用法 语法 grep 选项 内容|正则表达式 文件选项: -i 不区分大小写 -v 排除,反选 -n 显示行号 -c 统计个数查看文件里包含有的内容 [roo…

rtsp地址 + 测试网站 + java(免环境、免插件、零编码转换http播放)

目录 1、创建rtsp网站 2、测试rtsp网站 3、Java实现rtsp播放 ①maven添加依赖 ②访问http地址即可展示视频内容 1、创建rtsp网站 填写邮箱即可获得两个可用的rtsp网站(每月可免费用2G): https://rtsp.stream/ 2、测试rtsp网站 测试网络…

k8s kubectl top pod报错error Metrics API not available

文章目录 1、场景2、解决方法1、确认Metrics Server是否已经在集群中安装2、安装metric-server组件2.1、组件地址2.2、组件与K8S集群版本对应关系2.3、apply资源清单文件2.4、验证Metrics Server正常工作 1、场景 在使用kubectl top pod 命令时遇到了error: Metrics API not a…

人力资源中的人工智能:你应该知道的一切

人工智能已经成为行业讨论更广泛的突出话题。人力资源(HR)对于人力资源专业人士来说,了解这门课程也是如此。除了简要介绍什么是人工智能,以及你可能遇到的主要人工智能类型(或者你可能很快就会遇到它!)此外,本文还将探讨人工智能…

工业智能网关在现代工业生产中的重要性-天拓四方

工业智能网关是一款具备挖掘工业设备数据并接入到自主开发的云平台的智能嵌入式网络设备。它具备数据采集、协议解析、边缘计算,以及4G/5G/WiFi数据传输等功能,并能接入工业云平台。这种网关不仅支持采集PLC、传感器、仪器仪表和各种控制器,还…

公用对象池

什么是对象池? 对象池顾名思义就是存放对象的池子,主要是为了重复利用对象。将不用的对象扔进池子里,需要用的时候再从池子中取出来。这样的一套机制我们称为对象池。 为什么用对象池? 其实从定义我们就可以看出来,…

基于矩阵分解算法的评分预测实现---信息检索课设以及所涉及的深度学习原理

一、实验环境 Windows,Python 3 Python作为主要编程语言,使用Python的Pandas、NumPy、Matplotlib等库 二、实验内容 主要任务 查阅相关资料,了解矩阵分解算法的基本概念、应用场景及其难点。重点了解SVD(Singular Value Decomposition,奇异值分解)系列方法。掌握Pyth…

2023年的Facebook营销:超级完整指南

Facebook营销不是可选的,是必须的。Facebook是世界上使用最多的社交平台,每天吸引22.9亿活跃用户。 它也不全是度假照片和虚张声势。对于53.2% 的 16-24 岁互联网用户,社交媒体是他们进行品牌研究的主要来源。而且,66% 的 Facebo…

红黑树插入删除流程(流程图)

红黑树插入删除流程(流程图) 红黑树性质 左根右(二叉树)根叶黑(根节点是黑色的)不红红(不存在相邻两个红色节点)黑路同(对于每个节点,从该节点出发到任一空叶节点所经过…