文 | 方军 on 电商技术

一、背景

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

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

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

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

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

统一管理平台的后台操作页面,主要是权限管理界面和审批界面。由此就将发布的审批流程和权限管理进行了标准化。现有的二方平台,以及将来更多二方平台都可以通过统一管理平台提供的接口接入,在统一管理平台上进行权限和审批流程的管理。后续随着二方平台的复杂度变高,权限角色的增加,审批类型的增加都可以很方便地进行扩展和复用。标准化意义在于降低成本,包括开发成本和使用成本。日常开发中需要更多思考,识别业务中哪些可以标准化哪些需要个性化,然后将可标准化的部分抽象出来做成服务,对于效率和扩展性来说都是更好的选择。

扩展阅读

  1. 浅谈 Android Dex 文件

  2. 基于weex的有赞无线开发框架

  3. 有赞微商城-Android 组件化方案

  4. 有赞移动助手App 本地抓包方案

-The End-

Vol.213

有赞技术团队

为 442 万商家,150 个行业,330 亿电商交易额

提供技术支持

微商城|零售|美业 | 教育

微信公众号:有赞coder    微博:@有赞技术

技术博客:tech.youzan.com

The bigger the dream,

the more important the team.

查看一张表都有哪些用户有权限_有赞移动关于权限与审批流程的标准化相关推荐

  1. oracle查看所有用户_Oracle实用命令查看共用一个表空间的所有用户

    概述 有朋友问到如何查出表空间都被哪些用户使用的一些方法,因为有几种情况需要考虑,也顺便做个总结. 需求:如何查看共用一个表空间的所有用户 查看某表空间下表的所有者 使用dba用户查询: 1.如果先要 ...

  2. Flowable 79 张表都是干嘛的?

    文章目录 1. 表名前缀 2. 表名中间部分 3. 表名后缀 3.1 ACT_APP_* 3.2 ACT_CMMN_* 3.3 ACT_DMN_* 3.4 ACT_RU_* 3.5 ACT_HI_* ...

  3. 为什么insert操作会把整张表都锁住呢?

    为什么insert操作会把整张表都锁住呢? spring oracle 锁表 项目中遇到一个很奇怪的问题: 问题描述:现在需要从项目外部导大量的数据到项目内,这个时候我起了一个spring事务往很多张 ...

  4. navicat查看一张表显示正在加载中

    navicat查看一张表显示正在加载中 https://blog.csdn.net/longe20111104/article/details/107572537 引用该博客内容 原因 我用navic ...

  5. sql 同一张表中两个记录不能共存_如何分析交易记录?

    [题目] 某商场为了分析用户购买渠道.表1是用户交易记录表,记录了用户id.交易日期.交易类型和交易金额. 表2是用户类型表,记录了用户支付类型(微信.支付宝.信用卡等),分别有type1.type2 ...

  6. hive查看一张表的分区字段_Hive表的分区与分桶

    1.Hive分区表 Hive使用select语句进行查询的时候一般会扫描整个表内容,会消耗很多时间做没必要的工作.Hive可以在创建表的时候指定分区空间,这样在做查询的时候就可以很好的提高查询的效率. ...

  7. cross join 一张表没有值关联不出来数据_你是否还在对left join、right join和join有困扰呢?...

    说到SQL,很多人可能用了挺久,但依然有个问题一直困扰着,那就是 left join. join. right join和 inner join等等各种 join的区别.网上搜,最常见的就是一张图解图 ...

  8. 启动root用户 银河麒麟_麒麟系统使用root权限运行程序

    最近在虚拟机里安装了个国产麒麟系统.(不知道麒麟系统的百度下.) ************************************************** PS:首次试用的同学可以先用 V ...

  9. 给与用户建立dblink的权限_网络安全 之 NTFS安全权限

    NTFS安全权限 一.NTFS权限概述 1.通过设置NTFS权限,实现不同的用户访问不同的权限 2.分配了正确的访问权限后,用户才能访问其资源 3.设置权限防止资源被篡改.删除 二.文件系统概述 文件 ...

最新文章

  1. Java基础学习总结(9)——this关键字
  2. (How to) Call somatic mutations using GATK4 Mutect2
  3. Ubuntu 进入、退出命令行的快捷键
  4. Windows Phone 7 页面的数值传递和对象传递
  5. Java的Runtime类介绍
  6. jq的插件 vue中引用_详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
  7. dashboard windows 前端开发环境搭建
  8. 【Java】异常和IO在Gourmet咖啡系统中的应用
  9. Spring Boot 使用 AOP 实现页面自适应
  10. v-model数据绑定分析
  11. 前端为什么有的接口明明是成功回调却执行了.catch失败回调_前端知识整理
  12. 【Oracle】手工建库
  13. linux如何切换到root用户
  14. Amazon AWS Rekognition教程
  15. 实时数据采集架构原理(蜂巢)
  16. Android中指纹识别的使用
  17. localhost访问不了的解决方法
  18. linux远程可视化
  19. 如何培养孩子的金钱价值观
  20. windows下编程控制摄像头的详细介绍

热门文章

  1. 取 GridView 里 点击当前行的 行数
  2. 按钮3D分层悬停效果
  3. csdn怎样设置友情链接栏目
  4. VC/C++的中文字符处理方式
  5. Window10环境下的Jupyter notebook安装与打开默认路径的修改
  6. matlab sdk7.1,免费试用MATLAB Compiler SDK
  7. HTML Img Compression(压缩)
  8. 7-107 汉诺塔的非递归实现 (25 分)
  9. 6-1 稀疏矩阵求和 (70 分)
  10. 力扣62-不同路径(C++,留个思路)