权限优化
1.关键点
- 菜单新增了一个字段type 01菜单 02按钮 03页签(因为代码只处理了二级菜单的缘故,这里的页签都挂到一级目录下)
- 在sl_menu中按钮直接挂到菜单页面下面
- sl_role_menu 表新增了一个buttonPermission 字段,该字段记录了所有该菜单下面的按钮的别名
- 关联权限的时候做了点修改,按钮会展示到后面的可选菜单里面,按钮用"[ ]"括起来。关联好的权限按钮不会在sl_role_menu 插入一条新的数据,只是会修改buttonPermission ,在后面追加按钮的别名
- 修该了SimpleAuthorizingRealm类里面的doGetAuthorizationInfo方法,该方法在以前permission里面保存了1111(曾删改查)的前提下,新增了buttonPermission里面的所有权限
- 按钮删除的时候,会找到所有关联该按钮的sl_role_menu数据,然后删除掉buttonPermission 里面该按钮的别名
- menucontroller里面有两方法,updateAllMenu ,addAllMenu 这两方法第一个是批处理新增了按钮没有新增页签的所有权限配置,addAllMenu是批处理,新增了页签和页签里面的按钮的所有权限配置。上线正常后,下个版本可以删掉这两方法。
2.过滤的写法
<#promise hasPromise="PermissionTest:hasTest">
<div class="ui teal button js-checkAuthBtn" onclick="test();">
<i class="edit icon"></i>测试
</div>
</#promise>
<div class=" ui segment teal" id="jsPermission">
<div class="ui teal button js-checkAuthBtn" data-promise="PermissionTest:hasTest" onclick="approval();" >
<i class="edit icon"></i>测试
</div>
</div>
<script>
promise.filterPromise($("#jsPermission"));//调用filterPromise函数传入需要过滤的按钮的最小公共div
</script>
@At("/test")
@POST
@RequiresPermissions("PermissionTest:hasTest")
public NutMap test(){
NutMap result = new NutMap();
result.setv("ok",true);
result.setv("msg","测试成功");
return result;
}
流程配置
1.设计说明
- 为了尽量不修改以前的流程配置套路,这里的流程配置通过了一张中间表FlowConfigureRelation 去关联以前的FlowControlTmpl 和当前的流程Id,然后再通过一个FlowConfigure把所有FlowConfigureRelation 包含起来组成一个流程
- FlowConfigure流程主类,包含了编码和名称,以及产品id和渠道id,已经关键的FlowConfigureType这个枚举包含了借款申请流程,费用免除流程等等
- FlowConfigureRelation 关联FlowControlTmpl 和FlowConfigure里面的id,把两者关联起来,关键的字段枚举类型FlowControlType包含了业务审批,财务申请,高管申请,风控审批等
- FlowControlTmpl 下面关联FlowControlItem (老流程就是这么走的)
- 修改和新增流程都会走update方法,修改或新增前都会判断下该流程是否启动,启动不允许修改。通过判断是否有id来判断是新还是修改,循环的最后都有统一的删除方法removeDeletedBaseModel,删除当前对象存在,数据库里面不存在的方法,这个方法提取到了baseService类中,所有只要继承了该类的service都会有此方法。
- 启动工作流调用start方法,生成关联了产品的工作流xml格式数据插入到数据库中。
- 停止产品stop则删除这些数据
PDF模板
- PdfUtil支持两种模板,一种是字符串格式模板,格式中可以定义各种样式,一种是真正的模板。
- 两种方式都是通过对象的反射然后去匹配定义的变量名(变量名称与对象中的属性名称一样即可匹配然后填充值)
- 专门正对table表格做了一套字符串格式解析的不同产品类型模板工具PdfTableUtil,该工具主要生成table表格。里面可以实现多级对象和集合的嵌套。