APP下载

基于区块权限锁的文档多端更新的研究

2021-11-05树华伟

电子技术与软件工程 2021年17期
关键词:标识符服务端文档

树华伟

(大汉软件股份有限公司 江苏省南京市 210023)

1 研究背景

随着政府或企业的业务与规模的扩大,政府或企业在管理方面对信息化系统的依赖程度越来越高,对IT 系统的规划、建设、日常运营与维护、系统安全管理等都有了更高的要求。传统的办公管理模式一般通过QQ,Email、微信、钉钉和U 盘等形式进行文档之间的共享协作,繁复进行文档的传输和信息汇总,这种方式导致工作低效,企业文件分散,缺乏集中管理。而且存在不少隐性的问题,比如可能出现严重的信息泄露风险。此时,文档之间的协作正是解决这些问题的最佳方案,多人一起编辑一份文档,各改一块,又能同时看到别人的修改过程,实时文档协作,保证文档集中存储。

我们发现,多人同时编辑更新文档时容易出现冲突的问题,目前普遍的做法是使用多人在线文档协同编辑系统,其是指多个用户同时通过网络编辑同一份文档,每一个用户都可以修改文档、并实时地看到其他用户的修改。在线文档协同编辑系统使多个用户能够高效率地协同工作,显著提高文档编辑的速度。现有的典型的在线协同编辑系统有Google Docs、TWiki 系统等。

常用的协同编辑技术有TWiki 系统的编辑锁技术,Git 等管理软件的diあ-patch 算法,Google Docs 的Operational Transformation算法。编辑锁是实现协同编辑最简单的方法,编辑锁的方法就是在用户对某一对象或者区域进行编辑之前首先讲这个对象或者区域加锁,以防止其他用户同时对这个对象的编辑[1]。采用这种方式虽然可以在一定程度上避免覆盖问题,但它的使用体验不好,文档锁定的同时其他用户不能进行编辑操作,需要等用户编辑完才能解锁,在协同上具有局限性,并且用户对文档的修改是覆盖性的,即谁最后修改文档,则成为文档的最终版本,对中间用户的修改不可追溯,文档的可靠性不高。diあ-patch 算法和Operational Transformation 算法[2]技术均是面对同一权限的用户,即所有用户均可以实时对文档进行修改,并不能满足企业用户对于修改权限的需求,对于同一文档的内容,不同岗位的成员或是面向不同阶层的用户,若对文档具有统一的修改权限,任何人均可修改则会导致文档的可靠性不高,不能满足企业文档分布式管理的需求。

2 研究目标

为了解决以上现有技术的不足,提供一种管理方便且能较好解决多端数据更新冲突的方法,同时需要兼顾安全性和可靠性的特点。方法内容如下:

(1)客户端与服务端之间建立长连接,客户端通过文本差异算法输出文档的差异数据,通过长连接将差异数据传给服务端,服务端将差异数据更新到文档,并形成补丁包,同时将补丁包传至其他客户端,生成用户对文档写的操作;

(2)客户端建立文档数据时在特定位置插入权限标识符,权限标识符对文档内容进行区块划分,并赋予区块修改权限值,权限标识符记录区块位置数据和编辑权限值数据;

(3)客户端识别用户的身份权限值,若低于某一区块的权限标识符的编辑权限值,则相应位置区块被添加编辑锁;

(4)具有某一区块编辑权限的用户编辑该区块时,客户端将该区块中权限标识符的区块位置数据发送至服务端,服务端根据区块位置数据将该区块的权限标识符的编辑权限值数据进行可逆替换,将权限值替换为一大于用户最大权限值的数值,同时更新其他客户端在该区块的权限标识符数据,其他用户的这个区块将被添加编辑锁;用户退出该区块的编辑时,服务端根据区块位置数据将该区块的权限标识符的编辑权限值数据进行还原:若用户未修改该区块的编辑权限值,则编辑权限值数据还原为原来的值;若用户修改了该区块的编辑权限值,则编辑权限值数据还原为用户修改后的值。

3 研究过程

客户端与服务端之间建立长连接,客户端通过文本差异算法输出文档的差异数据,通过长连接将差异数据传给服务端,服务端将差异数据更新到文档,并形成补丁包,同时将补丁包传至其他客户端,生成用户对文档写的操作。

客户端建立文档数据时在特定位置插入权限标识符,根据权限标识符对文档内容进行区块划分,并赋予区块修改权限值,不同区块的内容根据用户身份具有不同的修改权限;权限标识符记录区块位置数据和编辑权限值数据。

用户编辑时,服务端与客户端建立WebSocket 长连接(长连接的一种,本次研究采用WebSocket 长连接,可以在浏览器和服务器之间建立一条双向通道,双方可以通过这个连接自由的传递信息[3]),在客户端建立文档的可编辑副本;客户端识别用户的身份权限值,若低于某一区块的权限标识符的编辑权限值,则相应位置区块被添加编辑锁;用户对某一区块编辑时,其他用户的该区块添加编辑锁;用户退出该区块的编辑时,其他用户的该区块释放编辑锁,客户端记录用户对该区块的修改操作生成修改参数数据,并通过diあ算法(文本差异算法的一种,本次研究采用diあ算法)输出现有文档和原文档的差异数据,通过WebSocket 长连接将修改参数和差异数据传给服务端,服务端通过patch 技术生成补丁包更新其他用户的文档。

服务端通过WebSocket 长连接将修改参数和差异数据传给其他用户,更新其他用户客户端文档的可编辑副本,同时显示修改参数和差异数据记录的信息。

在文档编辑过程中,权限标识符至关重要。它主要是记录区块位置数据和编辑权限值数据,当用户打开文档的可编辑副本时,客户端通过对比用户的身份权限值和权限标识符的编辑权限值数据决定用户对相应区块的编辑权限,当用户身份低于权限标识符的权限值时,相应位置的区块不能编辑,即添加编辑锁;当任一用户编辑文档的某一区块时,客户端将该区块中权限标识符的区块位置数据发送至服务端,服务端根据区块位置数据将该区块的权限标识符的编辑权限值数据进行可逆替换,将权限值替换为一大于用户最大权限值的数值,同时更新其他客户端在该区块的权限标识符数据,其他用户的这个区块即被添加编辑锁;当用户退出某一区块的编辑时,客户端将该区块的位置信息发送至服务端,该区块的权限标识符的编辑权限值数据进行还原,同时更新其他客户端的可编辑副本,其他有修改权限的用户即释放编辑锁。

为了数据的安全,权限标识符以字符串形式记录,权限标识符数据在客户端和服务端之间通过SM2 算法进行加密传输(加密算法的一种,国密非对称加密),对于权限标识符在服务端与客户端的映射,使用密码运算进行变换和逆变换。

权限标识符还记录区块序值数据,服务端对客户端上传的权限标识符的区块序值数据进行递增运算,避免不同用户在同一时刻、同一位置进行写入操作时造成区块混淆。

用户修改了区块的编辑权限值的数值不得大于用户本身的身份权限值,以免造成用户自身不得二次修改的困境。

以下列举实施例来说明用户对在线文档的多人协同编辑方法。

3.1 实施例1

现有不同身份权限值的用户a-f,其中用户a 不具有编辑权限,具体权限值如表1。

表1:权限值

新生成的空白在线文档D1 内容为空,任何具有编辑权限的用户均可对该文档进行写的操作。

用户a 通过客户端打开文档D1 时,客户端建立与服务端的WebSocket 长连接,由于其不具有编辑权限,客户端识别其身份权限值未赋值,则用户a 不可编辑文档D1,不能插入光标,并且用户a 的客户端仅实时接收服务端数据,不上传数据,但用户a 可实时预览其他用户对文档D1 的编辑过程。

用户b 通过客户端打开文档D1 时,客户端建立与服务端的WebSocket 长连接,客户端识别其身份权限值,用户b 在执行文档写的操作开始时,在插入光标时,客户端就在写入数据的字符前添加权限标识符数据的函数,待文档写入操作结束,记录用户b 写操作的区块位置数据和编辑权限值数据,生成区块值为1,权限值为0 的权限标识符数据,随即该权限标识符数据随区块内容数据一起上传至服务端。服务端接收用户b 的数据后,通过WebSocket 长连接将数据发送至其他用户的客户端实现同步。

用户c-f 同样对文档D1 具有如用户b 一样执行写的操作过程。

3.2 实施例2

文档D2 具有预先编辑好的内容,包含不同编辑权限值的区块BL0-BL4,具体权限值如表2。

表2:权限值

用户a 通过客户端打开文档D2 时,客户端建立与服务端的WebSocket 长连接,由于其不具有编辑权限,客户端识别其身份权限值未赋值,则用户a 不可编辑文档D2,不能插入光标,并且用户a 的客户端仅实时接收服务端数据,不上传数据,但用户a 可实时预览其他用户对文档D2 的编辑过程。

用户b 通过客户端打开文档D2 时,客户端建立与服务端的WebSocket 长连接,客户端识别其身份权限值为0,与文档D2 各个区块的编辑权限值进行对比,发现仅有区块BL0 的编辑权限值等于其身份权限值,所以仅能对区块BL0 进行编辑,在用户b 客户端上的区块BL1-BL4 具有编辑锁。

用户a-f 对区块BL0-BL4 的编辑权限如表3。

表3:用户a-f 对区块BL0-BL4 的编辑权限

用户b 在编辑区块BL0 时,客户端将区块BL0 中权限标识符的区块位置数据发送至服务端,服务端根据区块位置数据将该区块的权限标识符的编辑权限值数据进行可逆替换,将编辑权限值替换为9,同时更新其他客户端在该区块的权限标识符数据,用户c-f的身份权限值均低于9,则用户c-f 客户端上的区块BL0 也将被添加编辑锁。

用户b 编辑完区块B0 时,客户端记录用户b 对区块BL0 的修改操作生成修改参数,修改参数包括编辑的用户、编辑的时间信息等,并通过diあ算法输出现有文档和原文档的差异数据,即用户b修改操作的内容,通过WebSocket 长连接将修改参数和差异数据传给服务端,服务端通过patch 技术生成补丁包更新文档;同时服务端将区块BL0 的权限标识符的编辑权限值数据还原为0,即释放编辑锁,用户c-f 对该区块又可再次编辑;服务端更新文档后,通过WebSocket 长连接将数据发给其他用户,更新其他客户端文档,同时显示修改参数和差异数据记录的信息。

根据用户的权限在编辑不同区块时,客户端与服务端的更新逻辑如图1。

图1:客户端与服务端的更新逻辑

值得说明的是:

(1)不具编辑权限的用户a 虽不具备编辑权限,但可实时预览文档编辑过程;

(2)权限标识符的编辑权限值数据是可编辑的,可由用户自行设定,其最高设定值不高于用户本身的身份权限值,例如用户f对文档D2 进行编辑时,可以将区块BL4 的编辑权限值修改为3,原先该区块对用户e 是不可编辑权限,修改后用户e 将具备区块BL4 的编辑权限;

(3)同一用户在写操作时,可以通过插入权限标识符来对内容进行区块划分,并赋予不同区块不同的权限值,例如用户f 对文档D1 进行写操作时,可以插入两个区块,两个区块的具有不同的权限标识符,分别赋予这两个区块编辑权限值为4 和编辑权限值为3 的编辑权限。

4 研究结论

本次研究的方法,通过对插入权限标识符对文档进行分区块划分,赋予用户不同的身份权限和文档不同区块的编辑权限,使文档具有多人协同编辑的功能,并且通过编辑锁技术和文档差异算法的结合使用,使文档的编辑更具指向性,满足文档分布式管理的需求。

猜你喜欢

标识符服务端文档
浅析5G V2X 通信应用现状及其侧链路标识符更新技术
基于底层虚拟机的标识符混淆方法
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
基于区块链的持久标识符系统①
云存储中基于相似性的客户-服务端双端数据去重方法
新时期《移动Web服务端开发》课程教学改革的研究
在Windows Server 2008上创建应用
基于RI码计算的Word复制文档鉴别
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat