FineReprot 多人协作开发方案进阶版

声明

  1. 本文撰写此产品,并不表明任何推荐、不推荐等意向,不要将本文内容作为技术选型依据
  2. 本文撰写的开发方案为一次项目经历中自己总结的内容,不保证最优、最合适,经供参考
  3. 本文提及的 FineReport 为 2020.05.15.19.18.52 版本
  4. 本文提及的问题不一定能够稳定复现,甚至无法确定是否为人为原因,所以不算产品 bug

混乱的协作过程……

上一篇文章提到了基础的协作开发方案,但是还有很多局限性,比如:

  • 只有一个管理员账号,大家共用么?创建的其他账号无法进行设计开发
  • 版本管理怎么搞?用一账号看操作历史都不知道谁改的,误删了也无法回退
  • 有多个不同的开发团队,有一次误删了其他团队的文件夹导致了数据大量丢失
  • 操作失误导致帆软服务器“挂了”,我该如何备份已经做过的配置?包括用户信息、权限分配……
  • 服务器数据集总被别人误删怎么办!

角色与权限

FineReport 有一套相对完善的鉴权认证体系,当然用户也可以跳过角色、部门,直接获得报表浏览、后台管理的权限,但并不建议这么做。甚至有必要给开发团队一组专用的角色去管理,而不是直接给每个账号单独设置权限

image-20200630112849889

报表可浏览权限

最基础的浏览权,建议给用户配置角色/部门,并让角色属于部门,最后给角色配置可查看某些报表的权限。

展示的报表 不等于 所有的报表模板文件,需要先将文件系统的模板文件加入到可展示的报表目录中(文件系统->数据库系统),我们的绝大部分权限分配都是针对数据库系统的,后面提到的设计权限除外。

后台管理权限

我们可以对用户、角色、部门分别配置如下的管理系统权限,并可区分查看和操作权

image-20200629170525039

设计权限可见目录

报表设计权限并不在后台管理系统里配置,需要在设计器中配置。最初应该使用 admin 账号登录给第一波人配置权限:连接远程服务器(切换工作目录-远程服务器)-服务器-远程设计权限管理

此时可以分别针对用户/角色分配权限,建议针对角色分配,见下面的权限管理方案

权限管理方案

此方案仅为个人总结使用,请酌情考虑

由于用户、角色、部门都可以独立分配权限,且都是多对多关系,为了方便管理认为的限定了关系的复杂性:

  • 用户可以有多个角色
  • 用户可以有多个部门
  • 用户禁止直接具有任何权限
  • 部门禁止直接具有任何权限
  • 角色可以有多个权限
  • 角色共分为三类,命名规则:浏览XXX、管理XXX、开发XXX,每一类角色仅允许具有一类权限
  • 开发类角色名需要能够直观的定位到可操作的文件目录

这样对于多团队开发来说,可以新建每个团队的文件夹(一个团队多个文件夹 dev/qa/uat/proc 等)然后给每个团队创建三个角色分别具有对应文件夹的设计权、对应目录的浏览权、对应角色的管理权;后续开发人员的变动只需要创建账号并设定浏览与设计角色即可。

注意事项

  • 权限管理左上角齿轮,开启分层授权后可以做更复杂的权限管理,包括管理权的分配,构成多层的组织架构。
  • 角色的设计权一定要落到具体的文件夹上,通过这种方式可以避免团队之间文件的互相访问,做到团队隔离。
  • 有必要为一个团队创建多个文件夹,分别对应不同的环境。
  • 只要具有了设计权限,等于具有了服务器数据集的增删改查权,这个是跨团队的,无法隔离,若使用服务器数据集承载逻辑,请参考上一篇文章提到的操作步骤尽快将其沉淀到模板数据集。
  • 浏览权限只能针对已经配置成“可展示”的设计模板,这一步需要频繁配置,此时可以在 dev env 批量创建一组临时文件都设置成可展示,作为固定的几个可展示的“临时文件”,方便快速的做验证(也可以选择本地调试)
  • 模板认证建议设置为角色权限认证,如果设置认证用户密码那只要登录以后,通过 url 可以访问所有报表(跳过权限限制)

image-20200629180150725

服务器数据集安全性问题

数据集安全考虑到如下几种需求:

  • 不被随意的改动:不支持锁定

  • 可知的增删改拆:无法隔离,所有人具有修改权,无版本历史记录

  • 可回退到指定版本:没有版本概念,但可以通过数据库定期备份,尽可能做到保护

综上所述,并不建议大量的使用服务器数据集承载逻辑,尤其是在大团队、多团队开发时,毕竟谁也不能避免完全没有误操作。

因此对服务器数据集定义为了方便快速协作开发、合并使用,在合并完成后需要尽快的沉淀为模板数据集,以使帆软自带的文件版本历史功能生效。

模板数据集存储在设计模板文件里,必须让 *.frm 文件中,而服务器数据集存储在数据库中。

除此以外为了尽量保证服务器数据集安全性还需要对数据库定期备份,保证不会出现大规模的损失

外置数据库及数据库自动备份

数据库里存储了用户账号、角色、权限、日志、服务器数据集、计划任务、交互设计……等多种信息,默认使用了内置数据库(设计器的模拟环境 SQLite / 服务器 hsqldb),建议首先迁移成外置数据库,比如 MySQL。迁移方法:

内置数据库 – https://help.finereport.com/doc-view-1573.html

FineDB 表结构 – https://help.finereport.com/doc-view-3151.html

配置外接数据库 – https://help.finereport.com/doc-view-2458.html

迁移完成后就成了如何自动备份 MySQL 了……

简单地办法,服务器装个 MySQL(不需要完整安装,绿色版即可),使用其自带的 mysqldump 工具即可。创建一个脚本,然后计划任务调用。脚本如下:

rem ******备份开始******
@echo off

::删除一周前的备份数据
::forfiles /p "c:\backup_finedb" /m backup_*.sql -d -30 /c "cmd /c del /f @path"

::设置时间变量
set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"

::进入mysql安装目录的bin目录下
cd C:\mysql\bin\
::执行备份操作
mysqldump --opt --single-transaction=TRUE --hex-blob --column-statistics=0 --user="param_username" --password="param_password" --host=XXX.YYY.ZZZ.? --protocol=tcp --port=3306 --default-character-set=utf8 --set-gtid-purged=off --triggers --routines --events "finedb" > c:\backup_finedb\backup_%Ymd%.sql

@echo on
rem ******备份完成******

除此以外 FR 还是有一套自己的备份机制的:

image-20200630112610718

设计模板的版本管理

无论切换工作目录到远程还是本地,设计模板文件都有版本管理功能。只需要选中具体的一个模板,然后就可以看到:

image-20200629175006619

可以通过此功能快速的回滚到历史版本,但是若文件删除将无法回滚(与 git 不同),因此建议再配上一个 git,定期的提交备份。

frm 等文件实际上是 xml 文件,直接用 git 管理即可

感谢阅读,欢迎关注微信公众号:coologic

报表相关的系列文章请参考:


| 版权声明: 本站文章采用 CC 4.0 BY-SA 协议 进行许可,转载请附上原文出处链接和本声明。
| 本文链接: Cologic Blog - FineReprot 多人协作开发方案进阶版 - https://www.coologic.cn/2020/06/1795/

留下评论