python审批流系统_有赞移动关于权限与审批流程的标准化

一、背景

有赞移动有weex发布平台、移动配置中心平台、App分发平台、热修复平台等。这些平台都需要发布,而发布就需要规范化,需要审批制度。如果为各个平台开发这个审批流程,看起来是一种浪费。

首先想到第一种方案:接入现有的前后端发布平台。

移动侧的发布基本是配置类的发布,跟后端应用和前端应用的发布不一样。后端应用和前端应用的发布都是将指定的内容推送到某台或者多台机器进行部署、启动。两者如果硬要做抽象,成本反而更大,而且不易维护。所以放弃第一种方案。

那么是否可以抽象成单独的统一管理平台,进行标准化呢?

二、梳理

首先看一下标准的发布审批流程一般是怎么样的?

第一步:申请人提交发布单

第二步:负责人审批

第三步:申请人发布

而这里申请人和负责人就是以权限为区分。

一般的权限角色有模块负责人、开发、运营、测试等。

其中,审批人是模块负责人,而申请人可以是开发,也可以是模块负责人。而二方平台还可以根据不同角色赋予不同的权限。

2.1 权限

权限实质上指的是用户和模块之间的关系。所以只需要模块的唯一标识和用户的唯一标识,用户的唯一标识由统一的用户认证服务提供,模块的唯一标识由各个二方平台提供。对于二方平台来说,只要提供模块唯一标识和用户唯一标识,然后获得角色即可,然后根据角色进行相应的操作。所以这一层就可以单独抽离出来。现有的前后端发布平台也已经验证了这一点。

2.2 审批

审批需要哪些元素呢? 申请人、审批内容、审批人、审批状态。其中审批内容在各个二方平台是不一样的。

尽管如此,还是可以抽象成两个字段:审批单唯一标识和用于查看审批详情的链接。这两个字段都可以由二方平台提供。所以审批也是可以做抽象的。

三、设计

如何设计这个统一的平台将权限与审批流程标准化呢?首先看一下二方平台和有赞移动权限与审批统一管理平台(以下简称统一管理平台)的交互流程图。

首先,二方平台和统一管理平台都要依赖CAS,CAS是有赞的用户认证平台。这样,就可以基于同个用户进行权限管理。

3.1 二方平台与统一管理平台的交互

从图中可以看到,二方平台与统一管理平台主要有四大交互:添加模块、获取权限、提交发布单、获取发布单状态。

3.1.1 添加模块

模块是最小的可配置权限的元素,比如weex发布平台对应的各个模块、热修复平台对应的App等。需要在发布平台配置权限的时候,就需要选择模块。所以,二方平台在注册模块的时候,需要同步到发布平台,带上平台和模块的唯一标识,以及模块的名称,增强可读性。

3.1.2 获取权限

权限由统一管理平台管理,模块负责人可以编辑权限,其他人可以申请权限。

二方平台通过携带平台和模块的唯一标识,以及用户的唯一标识,从统一管理平台获取权限,依赖权限进行相应的操作。

3.1.3 提交发布单

移动侧的各个二方平台发布的内容基本是配置类的信息,配置的内容、格式、条件都不一样。

比如weex发布的内容包含平台、环境、规则、描述,和页面列表,如图:

而热修复平台发布的内容包括应用版本、补丁文件、描述、下发模式(规则)等:

首先想到的是将这些配置类内容抽象成内容、规则和描述。但是如果这么做的话,各个二方平台展示时各自需要重新解析,也不便于根据内容里的字段进行搜索。

所以,各个二方平台的发布页面由各个平台自己开发,提交发布单的时候,再将唯一标识符(包含平台、模块、发布单ID等)和发布单详情的url传给统一管理平台,统一管理平台来维护一张审批表,包含发布单唯一标识符、状态、申请人、发布单详情url等。

其中,状态包括待审批、审批通过、审批拒绝。发布单详情url用于审批人在统一管理平台审批时可以跳转查看审批内容详情。

3.1.4 获取发布单状态

各个二方平台有各自的发布单详情表,而审批状态统一从统一管理平台获取。二方平台通过审批状态,判断是否可以进行发布。

3.2 优化改进

3.2.1 权限申请入口

考虑到每次需要添加的权限的时候,都需要模块负责人去权限管理页面添加,对于负责人来说是一种不必要的时间浪费。于是增加权限申请的入口,不仅在统一管理平台可见,在各个二方平台也开发入口,通过再url后面携带平台、模块、角色等参数,跳转到统一管理平台的权限申请页面。申请后,模块负责人会收到通知(企业微信、钉钉或者其他形式),同意申请即可。既减少了模块负责人的操作成本,也减少了模块负责人与申请人的沟通成本。

3.2.2 审批通知与审批结果通知

申请人发起发布申请后,审批人会实时收到通知。而审批人通过/拒绝申请后,申请人也会实时收到通知。减少了二者的沟通成本。

3.2.3 允许关闭审批

可能有一些模块的特殊性(测试模块),或者环境的特殊性(有赞的网络环境分为Daily、QA、Pre、Prod),有些模块在某些环境需要关闭审批,这样更能提高效率。否则在测试环境,每次发布都要审批,着实比较麻烦。

四、总结

由此,所有的审批操作和权限操作都在统一管理平台进行。添加模块、提交发布单和发布、回滚等操作在各自的二方平台进行。统一管理平台以Dubbo的形式向二方平台提供统一标准接口:

接口一:在统一管理平台创建模块

接口二:获取到用户在发布平台的角色

接口三:在统一管理平台创建/撤回审批单

接口四:获取审批单的进度

统一管理平台的后台操作页面,主要是权限管理界面和审批界面。

由此就将发布的审批流程和权限管理进行了标准化。现有的二方平台,以及将来更多二方平台都可以通过统一管理平台提供的接口接入,在统一管理平台上进行权限和审批流程的管理。后续随着二方平台的复杂度变高,权限角色的增加,审批类型的增加都可以很方便地进行扩展和复用。

标准化意义在于降低成本,包括开发成本和使用成本。日常开发中需要更多思考,识别业务中哪些可以标准化哪些需要个性化,然后将可标准化的部分抽象出来做成服务,对于效率和扩展性来说都是更好的选择。

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

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

相关文章

生成一个平面矩形网格文件

简介 生成一个平面矩形网格。 代码 // CreateGrid.cpp: 定义控制台应用程序的入口点。 ////#include "stdafx.h" #include <iostream> #include <OpenMesh/Core/IO/MeshIO.hh> #include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh> #include<…

linux下tomcat脚本,Linux下重启多个 tomcat 服务的脚本(推荐)

由于修改tomcat的配置文件或手动操作数据库数据后&#xff0c;tomcat的缓存和redis的缓存很严重&#xff0c;需要经常重启tomcat来释放缓存&#xff0c;经常就是手动重启。# 1、查找tomcat的进程IDps -ef | grep tomcat# 2、根据路径去查找进程ID&#xff0c;然后逐个杀掉(毕竟…

qt 定时器累加值_零基础入门单片机定时器详解

一、基本定时器介绍在STM32中&#xff0c;基本定时器有TIM6、TIM7等。基本定时器主要包含时基单元&#xff0c;提供16位的计数&#xff0c;能计数0~65535。基本定时器除了计数功能以外&#xff0c;还能输出给DAC模块一个TRGO信号。基本定时器框图如下&#xff1a;二、时基单元介…

生成 一个多边形网格的函数

简介 生成一个多边形网格的函数。 三角形面片判断法线方向 顺时针&#xff0c;表示平面方向向下&#xff1f;&#xff1f; 逆时针&#xff0c;表示平面方向向上&#xff1f;&#xff1f; 代码 // AddPolygon.cpp: 定义控制台应用程序的入口点。 ////#include "stdafx.h&qu…

linux系统怎么设置开机密码,Linux_Linux系统怎么设置开机密码?Linux设置开机密码的方法,为了保证Linux系统的安全,应 - phpStudy...

Linux系统怎么设置开机密码&#xff1f;Linux设置开机密码的方法为了保证Linux系统的安全&#xff0c;应该给系统设置开机密码。注意&#xff0c;“开机密码”和“登录密码”是不同的。本文笔者就和大家分享一下“给Linux设置开机密码”的经验&#xff0c;希望能能对大家有所帮…

jvm 安装位置_简单了解JVM

1、JVM的位置&#xff1a;JVM是在操作系统上面的应用软件JVM虚拟机有三种如下&#xff1a;① Sun公司的HotSpot&#xff1b;    ② BEA公司的JRockit&#xff1b;    ③ IBM公司的J9 JVM&#xff1b;java虚拟机属于第一种&#xff1a;2、JVM的体系结构&#xff1a;3、类…

前端安全之 XSS攻击

参看&#xff1a; XSS的原理分析与解剖 前端安全 -- XSS攻击 web大前端开发中一些常见的安全性问题 1、前言 XSS 是面试时&#xff0c;hr提出来给我的&#xff0c;然后大体的浏览一遍&#xff0c;今天才查阅资料大体了解了它。 XSS 攻击&#xff1a;攻击者向HTML页面传入恶意的…

linux设置命令nmui,Linux网络配置及管理

一、IP、网关、路由、掩码网络间主机的通信是通常是基于TCP/IP协议。数据从A主机发送到网络中的B主机&#xff0c;需要通过层层包装及协议转发&#xff0c;最终通过B主机的IP地址定位&#xff0c;B主机才能最终接收到数据。这个过程很复杂&#xff0c;中间数据的处理是通过TCP/…

anaconda新建python2环境安装不了jupyterlab_在Mac下安装anaconda及配置jupyterLab和PyTorch的方法...

在Mac下安装anaconda及配置jupyterLab和PyTorch的方法1、 首先在anaconda官网上下载anaconda包(国内网速度不算太慢)https://www.anaconda.com/products/individual#macos2、 创建一个新的环境&#xff0c;用于Pytorch的学习conda create –name pytorchpython3.7标蓝部分可以换…

图片

转载于:https://www.cnblogs.com/water-1/p/11138418.html

idea 调节背景护眼_夜间用电脑亮瞎眼睛?这份夜间护眼指南来帮你。

题图&#xff1a;来自 Unsplash文/彭宏豪&#xff0c;笔名/安哥拉不知从什么时候起&#xff0c;「头秃」成了网友和周围人口中的一个高频词汇&#xff0c;似乎很多事情都离不了头秃——学到头秃、工作到头秃、熬夜到头秃等等&#xff0c;就连「突然」也渐渐演变成「秃然」。但对…

windows和linux命令的区别,linux和windows命令区别

命令的目的MS-DOSLinuxLinux 的简单实例复制文件copycpcp thisfile.txt /home/thisdirectory转移文件movemvmv thisfile.txt /home/thisdirectory列举文件dirlsLs清除屏幕clsclearClear关闭 shell 提示exitexitExit显示或设置日期datedateDate删除文件delrmrm thisfile.txt把输…

生成一个Cylinder

简介 用到了上一个博客的&#xff0c;AddPolygon。 生成的是一个筒状物体。 代码 // CreateCylinder.cpp: 定义控制台应用程序的入口点。 ////#include "stdafx.h" #include <iostream> #include "AddPolygon.h" #include <OpenMesh/Core/IO/Mesh…

linux下添加apt-get命令,Ubuntu Linux系统下apt-get命令整理

Ubuntu Linux系统下apt-get命令整理首次接触ubuntu&#xff0c;很多命令都需要sudo。尤其是安装命令都需要apt 。这里做个apt命令的简单汇总&#xff0c;方便一来了解下加深印象&#xff0c;二来以便以后使用查阅。常用的APT命令参数&#xff1a;apt-cache search package 搜索…

编写有效用例电子版_剖析用例设计方法的使用

今天给大家讲解的是用例设计方法的使用&#xff0c;在设计用例时该如何应用用例设计方法、设计出覆盖率高的测试用例呢&#xff1f;场景简介&#xff1a;普遍登录页面测试用例设计分析拿到需求&#xff0c;首先要做需求分析。我们看到登录界面有三个测试点&#xff1a;1.账号2.…

一个参数大小写引发的uploadify报错 Syntax error, unrecognized expression: #

上传控件uploadify 报错"Syntax error, unrecognized expression: #" 版本为 uploadify3.2 报错原因&#xff1a;参数ID【hidInfoId】小写错写成了大写。debug过程&#xff1a; ①&#xff1a;报错 "Syntax error, unrecognized expression: #" ②&#xf…

linux切换目录使用命令,linux命令切换目录的使用方法

1.cd - 作用是快速切换到前一个目录&#xff0c;如下:amosliamosli-pc:~$ cd learn/fd/amosliamosli-pc:~/learn/fd$ cd -/home/amosli2.dirs:显示目录栈,列出当前堆栈中保存的目录列表amosliamosli-pc:~/learn/fd$ dirs~/learn/fd说明: dirs的 -p参数可以每行一个目录的形式显…

python小孩的报酬_孩子做了家务,家长该不该支付“酬劳”呢?

现在有一些家长&#xff0c;跟自己的孩子签订“家务劳动劳务合同”&#xff1a;如刷碗一次付2元&#xff0c;扫地一次付2元&#xff0c;取牛奶一次付1元……活干完&#xff0c;经验收合格&#xff0c;结账&#xff0c;现金支付劳务报酬。这些家长认为这样做符合“等价交换”的原…

LinkedHashMap 源码详细分析(JDK1.8)

原文链接&#xff1a;https://www.imooc.com/article/22931转载于:https://www.cnblogs.com/Wbin01/p/11142250.html

linux冷备机怎么切换,linux – 热备用主机vs冷备用主机?

Sobrique explains how the manual intervention causes your proposed solution to be sup-optimal和ewwhite talks about probability of failure of various components.这两个IMO都提出了非常好的观点,应该加以深思熟虑.然而,到目前为止,似乎还有一个问题似乎没有人评论过,…