落霞与孤鹜齐飞,秋水共长天一色。
2020 年以来,新冠肺炎疫情持续肆虐中华大地,继而蔓延至全球,成为世纪大流行瘟疫。我们持续支持全球众志成城、携手并肩,共克时艰,攻克病毒。
gMIS 吉米斯部署的实例日益增多,二次开发者也不断跟进研制新功能或完善现有模块。在使用过程中,gMIS 吉米斯不断迎接新的需求,也发现一些亟需改进的功能模块,如下是一些最近的更新记录,备忘于此。3 月份开春以来,gMIS 吉米斯也迎来更新的密集期,如下是继 3 月的“gMIS 吉米斯升级支持 IPv4/IPv6 双栈网络模式(https://ufqi.com/blog/gmis-wi…)”之后又一次一定范围升级。
1. gMIS Bugfix:getUrlByTime + Pickup
点选 Pickup 是 gMIS 吉米斯标志性功能之一,这一模块详情在“超越前端 Beyond Frontend — 吉密斯 /gMIS 增加点选 /PickUp 概览功能(https://ufqi.com/blog/beyond-…)”中有详细的记载与描述。
点选 Pickup 实现的原理是,在页面加载完成后,对目标数据表相应字段的值进行范围划分,并根据设置将这些值划分到 10 个或者更多个区间,然后每个区间作为一个点选的选项,陈列出来。随后,用户根据自己的意图,进行某个或者某几个区间的点选,进而自动形成筛选条件,呈现出筛选结果集来。
这是理想的点选应用的场景,有时候事情往往不一直是这样。比如 gMIS 还有另外的功能,可以自动生成按时间区间的超级链接,今天 / 昨天 / 本周 / 上周 / 本月 / 上月 等,如果这个本周的时间范围,与点选的区间不重合,就会出现问题。
这次的升级就是要解决这个问题,解决问题的办法是,当用户 / 系统的请求的区间范围不在点选的候选列表的区间时,就自动将这个不在任意区间的选择条件作为一个新的区间,附列在点选条件对应的列表后面。我们称之为 点选 Pickup 2.0.
2. gMIS 系统安全加固
2.1. 登录会话:闲时自动退出后的返回按钮阻止处理
当无交互动作(键盘,鼠标)处于闲时状态时,过一个给定时间自动退出,此时按浏览器返回按钮,通常会回到退出前的一个页面。
gMIS 的权限设计中,鉴权的依据是 SID,如果这个 SID 没有失效,则刷新一下还可以用。所以,超时自动退出这样的事情,就有了两个思路:
A. 在签发 SID 的时候,将其有效时长约定为希望用户无交互时的最大等待时长;
B. 在浏览器的网页里通过 JavaScript 实现对回退按钮的阻止;
C. 当然了,也可以 A 和 B 同时使用。
本次安全加固的修改之一即是实现上述目标,阻止用户在约定的时候内弹出后再回退到系统中来。
2.2. 权限系统改造:闭合系统 close-end 向开放 open-end 转变
基于防火墙理念设计的权限系统能够满足几乎所有能够想象得到的用户访问控制。
开放系统,默认所有模块向所有人可用,如果需要进行权限约束的地方,再逐项约束条件加进来,以实现对访问的限制。
闭合系统,默认所有模块向所有人不可用,如果需要某些模块向某些人开放,再逐项增加许可条件进行开放,以实现对资源的可用。这是此前 gMIS 吉米斯采用的权限设置策略。
明显地,闭合系统适合对安全要求苛刻的场景和案例,遵守“无授权不许可”的原则 ,实行的是“白名单 WhiteList”制度;而开放系统则适合一般常见的场景和应用案例,遵循“ 法无禁止即可行 ”的原则,实行的是“黑名单 BlackList”制度。
此前 gMIS 吉米斯选择闭合系统,是基于安全的考虑,现在转为开放系统也考虑到应用 gMIS 吉米斯的更多的中小企业、中小型管理信息系统的场景。
有鉴于此,我们针对 gMIS 的权限系统做了改进,使之默认的权限实施由闭合系统转为开放系统。
当然,所谓的闭合系统(close-end)和开放系统(open-end)都是相对的,比如在闭合系统里,如果加上一条访问规则,允许所有组的用户访问所有组的模块,则其实际上就成为一个开放的系统;同样地,如果在一个开放的系统里,如果加上一条访问规则,不允许任何组的用户访问任何组的模块,则该系统又瞬间由开放系统转为闭合系统。
如此以来,则实现了,开合自由,最大限度的将选择权交给系统管理员。
2.3. gMIS 权限系统升级:对人为错误尝试兼容
基于防火墙理念的权限系统设置,对系统管理员有一定的要求,要求熟悉用户访问规则的书写,当发生非预期情况时,能够根据警告信息或者日志记录进一步地的分析原因,定位限制实施涉及到的条款,然后排解故障。
系统管理员终归是人,难免有偏差和遗漏,为此我们在 gMIS 吉米斯系统权限审查程序中增加了对可能出错的条款的兼容,一个隐式的规则是:当单元模块与单元模块组发生错配时,通常会丢弃这一错误配置,现在进一步地修改为,仍旧使用单元模块进行权限规则的适配,进一步地降低错误带来的伤害,进行一定程度上的容错。
也正是因为此,gMIS 吉米斯 使用了迄今位置最为复杂的一条 SQL 查询语句,这也从另外一个侧面反映是 SQL 语言复杂表达能力和 MySQL 数据库强大的解析能力。
select id,accesstype,objectfield,userid,usergroup
from useraccesstbl
where istate=1
and (
(
(userid=’”.$thisId.”‘or userid=0)
and (usergroup=’”.$thisGrp.”‘or usergroup=0)
and (objectid=’”.$objId.”‘or objectid=0)
and (objectgroup=’”.$objGrp.”‘or objectgroup=0)
)
or (userid=’”.$thisId.”‘and objectid=’”.$objId.”‘)
)
order by id desc, accesstype desc limit 100
每当构造这些复杂而强大的 SQL 表达式时都会感慨 SQL 语言的设计者的精巧与智慧,也同时对强扭作态的基于反射与映射的开发框架执行创制的各种检索命令表示遗憾与可惜。如果不设计成 SQL 这样就无法完成类似表达,而如果设计成同样的,几乎等于是重复相同的工作。
3. 增强对页面 UTF- 8 和页面语言的声明
此前:
<meta http-equiv=”Content-Type”content=”text/html;charset=utf-8″ />
改进后:
<meta http-equiv=”Content-Type”content=”text/html;charset=utf-8″ />
<meta charset=”utf-8″/>
相应地,根据 gMIS 对 i18n 多国语言的升级,gMIS 吉密斯 i18n 多语言国际化更新(https://ufqi.com/blog/gmis-i18n-updt/),我们也增加了针对 html lang 的属性指定。
此前:
<!DOCTYPE html><html>
改进后:
<!DOCTYPE html><html lang=”{$lang[‘ilang’]}”>
4. 改进表单验证:增加对必填项的星标提示和高亮显示提醒
对于必填项,在录入表单中给与星标提醒;在递交表单内容时,对需要进行录入数据验证的,按指定的规则进行验证,对于不符合要求的数据项,给与高亮显示,并终端表单递交,等待用户的进一步操作。
表单数据项的验证,只要依靠 -GTAjax 来进行,详情参考:https://ufqi.com/dev/gtajax/。
5. gMIS 软件使用授权增加开源许可协议 Apache License.
gMIS 吉密斯开发者和用户可以任意修改、使用,保留相应版权信息,遵循 Apache 开源软件许可协议。
Apache Licence 是著名的非盈利开源组织 Apache 采用的协议。该协议和 BSD 类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和 BSD 类似:
需要给代码的用户一份 Apache Licence
如果你修改了代码,需要在被修改的文件中说明。
在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
如果再发布的产品中包含一个 Notice 文件,则在 Notice 文件中需要带有 Apache Licence。你可以在 Notice 中增加自己的许可,但不可以表现为对 Apache Licence 构成更改。
Apache Licence 也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布 / 销售。
.
6. gMIS 内核 inc/Dba 升级
伴随 gMIS 的底层架构 GWA2 吉娃兔(https://ufqi.com/dev/gwa2/)的内核 Bug 修复升级,gMIS 吉米斯也对其 inc/Dba.class 进行升级改进。主要改进是在 SQL 语句进行安全检查前,需要匹配字段名和赋值的对应关系,这已经是 GWA2 在这方面的第三次较大范围的算法改进。
涉及到的类和方法:inc/dba.class: hm2idxArray .
7. gMIS 顶部菜单布局调整
改进了顶部菜单栏的布局,修正了其中 通知区域的 CSS 错误,改变了各个列的显示比例。
其他细节修饰的调整。
涉及到的页面:view/index_main, view/ido_main .
-gMIS (general Management Information System,吉密斯) 是一种基于 -GWA2 (General Web Application Architecture,吉娃兔) 的通用管理信息系统应用软件,具有可配置的输入和输出接口、开箱即用等特征。
可以在 gMIS 吉米斯 上构建各种管理信息应用系统软件,例如:
内容管理系统(CMS), 客户资源管理 (CRM), 企业资源计划管理(ERP),
办公自动化系统(OA)等,
也可以是各种行业应用管理系统软件,例如:
人力资源管理系统(HR),学生管理,档案管理,旅游管理,图书管理,
商品管理及业务运营支撑系统(BOSS)等等。
gMIS 吉米斯 能够实现零代码开发、数分钟内快速搭建各种管理信息系统(MIS, Management Information System).
-gMIS is a -GWA2 based Management Information System (MIS) software with characteristics like configurable input and output interfaces, open-box-to-use.
Various management application software systems can be built on it, such as
Content Management System (CMS), Customer Resource Management (CRM), Enterprise Resource Planning Management (ERP),
Office automation systems (OA), as well as different industry application management system softwares, such as
Human Resource Management System (HR), Student Management, Archive Management, Tourism Management, Book Management,
Commodity management and business operations support systems (BOSS), etc.
With zero code development, -gMIS can build a set of management information systems (MIS) software in a few minutes.
**Lower Costs,
**Better Productivity.
降低成本,
提高效率.
https://ufqi.com/blog/gmis-up…
-R/o2SQ