抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

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

2019 年 9 月 07 日

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

一、背景

有赞移动有 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 的形式向二方平台提供统一标准接口:


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

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

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

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


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




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


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


本文转载自公众号有赞 coder(ID:youzan_coder)


原文链接


https://mp.weixin.qq.com/s?__biz=MzAxOTY5MDMxNA==&mid=2455759985&idx=1&sn=edf143040aaddb26d2b12b3e5c33bd62&chksm=8c686a54bb1fe34287a1f2d2fcd98d3d2268276e7797766f586cf9379cfc8d17c64dd5ac5f9b&scene=27#wechat_redirect


2019 年 9 月 07 日 08:002745

评论

发布
暂无评论
发现更多内容

【技术干货】文件系统中的“锁”

焱融科技

分布式 云原生 高性能 文件存储 容器存储

阿里大牛亲码 Spring AOP详解笔记全网开源,学透并发只需3天

飞飞JAva

spring aop

消息队列的两种模式

五分钟学大数据

kafka 5月日更

前端项目上传图片,压缩,拍照图片旋转解决方案

Vue js canvas axios

python解释器+pycharm的安装

Geek_6370d5

#python学习之路

300条数据变更引发的血案-记某十亿级核心mongodb集群部分请求不可用故障踩坑记

杨亚洲(专注mongodb及高性能中间件)

数据库 mongodb 架构 MySQ 分布式数据库mongodb

☕【Java技术之旅】如何彻底认识AQS的原理(上篇)

李浩宇/Alex

Java AQS JVM JUC 5月日更

太赞了!美团大牛强推的Spring事务笔记,上线仅1天就获赞上万

飞飞JAva

Java 事务spring

JavaScript设计模式之单例模式

HaiJun

JavaScript 设计模式 单例模式 前端进阶

【智慧农业】从“看天吃饭”到“知天而作”,乡村振兴全靠 TA

IoT云工坊

人工智能 物联网 智慧农业 庭院灌溉 温室大棚

消除数据孤岛,华为云DRS让一汽红旗ERP系统数据活起来

华为云开发者社区

数据库 GaussDB 数据孤岛 华为云DRS ERP

王兴的失败观

池建强

成功 王兴 创业失败启示录

IM扫码登录技术专题(三):通俗易懂,IM扫码登录功能详细原理一篇就够

JackJiang

即时通讯 IM 扫码

Apache Hue介绍

大数据技术指南

hue 5月日更

来了!这份阿里P7大佬梳理的Java注解和反射精髓笔记,信息量过大

飞飞JAva

Java

阿里P7大佬!王者级讲解ConcurrentHashMap源码,码农:太透彻了

牛哄哄的java大师

Java ConcurrentHashMap

异步编程的几种方式,你知道几种?

xcbeyond

Java 异步编程 5月日更

能让GitHub低头!这份阿里10W字内部Java字面试手册到底有多强?

马小晴

Java 编程 程序员 面试

GitHub霸屏文章!清华教授手写保姆级笔记Scala - 类,网友:太香了

牛哄哄的java大师

Java scala

高德 Serverless 平台建设及实践

Serverless Devs

阿里云 Serverless 云原生

被解救的代码 - 代码即服务时代来了!

Serverless Devs

阿里云 Serverless 云原生

一文带你全面了解java对象的序列化和反序列化

华为云开发者社区

Java 序列化 java对象 反序列化 Serializable接口

阿里P7:每个码农都应该知道的MySQL主从复制方法,看这篇就够了

牛哄哄的java大师

Java MySQL 数据库

如何下载和保存YouTube上的中英双语字幕和视频

flyfk

字幕

云原生下的灰度体系建设

阿里巴巴云原生

容器 运维 云原生 k8s 监控

拥有一个高性能低延时数据库是什么样的体验?

华为云开发者社区

数据库 华为云 GaussDB GaussDB(for Cassandra) 低延时

5月20日,GaussDB将有大事发生

华为云开发者社区

数据库 云原生 华为云 GaussDB TechWave

云厂商下一块必争之地就是它了!

Serverless Devs

Serverless 云原生

凭借师兄甩给我的通关秘籍,顺利拿到字节Offer

学Java关注我

Java 编程 架构 面试

云原生的进一步具象化

阿里巴巴云原生

大数据 容器 云原生 监控 中间件

Nginx如何配置Http、Https、WS、WSS?

冰河

nginx 负载均衡 反向代理 https HTTP

Study Go: From Zero to Hero

Study Go: From Zero to Hero

有赞移动关于权限与审批流程的标准化-InfoQ