教程总目录
JBolt平台系统概述:
这里说的JBolt开发平台并不是JFinal Eclipse插件-jbolt,而是小木公司里开发项目使用的内部平台,旨在极大节省开发投入的人力和时间成本,增加前后台、接口的开发效率。目前已经使用到多个项目中。
JBolt平台主要技术栈
JFinal3.7、JFinal-undertow1.6、Bootstrap4.3、JQuery3.x、Mysql、Pjax等
另外使用了jbolt.cn开发的eclipse插件辅助开发。
JBolt的应用实践案例
1、数据猫教育投资版
金未资本旗下教育行业投资人使用的工具,前端是小程序,后端是公司内部日常办公、研究使用的管理系统,小程序使用的数据接口。
JBolt基础平台提供的能力,满足了数据猫的快速开发需求。
2、jbolt.cnEclipse插件的在线更新管理系统
管理几十个类库的在线更新,JBolt的版本迭代、发布、changeLog、和升级文件。
3、微信公众号和小程序电商
已经完成一大半。
4、JBolt VIP用户里做了好多税务局啊,教育局事务管理啊,电商,国家工信部系统之类的。
JBolt平台能力
JBolt里的设计做到了快速开发和灵活应对需求变化,详细请看下面的解释:
平台图解
代码图解
JBolt目前为了照顾很多JFinal新学员针对GIT和MAVEN操作不熟悉 降低学习成本, 分层分包不太会用的情况,使用了比较简单的maven工程结构,未来随着成员的不断成长和学习,逐步基于maven 构建多模块应用结构。
1、用户管理:
包含创建用户、分配角色(一人可多角色)、分配账号密码、重置密码、禁用账户、用户登录系统等可视化功能
用户一经登录,会将自身的ID存入Session,在Controller层需要使用或者需要传递给下面service使用的时候,可以使用getSessionAdminUserId()去获取。
方便后面service里判断用户信息和特殊权限的时候使用,手工调用日志记录接口有需要传入操作人信息,就是它。
2、系统权限资源管理:
左侧导航菜单权限(二级,可扩展多级)、非菜单权限(其它任何按钮链接和非可视化权限)。权限菜单的排序功能,已经权限资源的缓存。
注意:这种设计可以灵活应对需求,主要分配左侧菜单导航用户控制用户访问大模块入口,其它细节有的系统只要进入模块 用户就可以拥有整个模块下的所有功能操作权限,但是也有系统需求是必须控制住按钮的显示和隐藏,这样可以通过在模块下增加三级权限设置为非菜单权限或者扩展分类出按钮权限,在页面判断是否存在各种按钮对应的权限标识,如果存在就显示,如果不存在就不显示。
新增权限资源:
上图展示一个权限资源默认拥有的字段属性,上级资源用来指定隶属的模块层级,资源名称、ICONS是给左侧一级菜单使用的,指定左侧显示的图标。
这里的图标是使用了Font-awesome.css这种字体图标。所以里面直接输入字体图标的标识就行了。
在右侧管理列表中添加编辑的菜单资源,名字、地址、图标、还有显示顺序都跟左侧实际出来的导航一一对应。
新增非菜单权限说明
这里举个例子:现在系统定义一个角色叫资料审核员,需要对公文资料模块进行增删改查基础上,还需要有一个审核审批的能力。
需要控制页面是否显示出审核按钮。
两种做法:
1、使用自定义指令#permission(“permissionKey”)实现
看下图,通过指令判断权限存在就渲染包含的内容,其中指令的参数是PermissionKey中的权限定义常量。
2、第一种方法是控制显示和隐藏两种状态,那么有时候还需要if else模式
就是如果有这个权限显示一个按钮,如果没有这个权限可能就显示一个提示信息,一个错误信息,或者任何一个你想显示的组件。
此时就需要一个辅助的权限验证了:这里使用#if #else #end 判断表达式里使用hasPermission去判断权限
在模板引擎配置里有相关配置,UserAuthKit这个用户鉴权工具类
配置一下就行了
小疑问?
这里可能你会疑问,权限资源都是存在数据表里的,怎么在上面图中看到,每个资源都有自己的资源标识KEY。
这套系统里提供了从数据库里一键生成静态常量的方法。
方便在Controller层注解使用和模板文件中使用。
权限资源常量生成器
链接数据库,读取资源定义表permission,生成PermissionKey.java
注解的使用:
注解 checkPermission(permissionKey)意思是这个Controller中所有的action 访问的时候都要做针对指定权限Key的权限拦截判断
权限其他地方使用
JBolt平台使用数据库里定义权限、角色分配权限、用户分配角色的方式灵活控制权限资源。
系统用户登录后,会将此用户分配的一个或者多个角色的可用权限加入在缓存,这样在其他地方可以快速使用。
例如在拦截器内的权限判断,可以通过在Controller中的注解获知道 正在访问的action是否通过权限资源对比校验,对比时候就根据当前session中的用户去找的缓存内的权限。
UserAuthKit.java
这个工具类提供了权限校验的静态方法hasRole、hasPermission
这个就是被自定义指令#permission使用用来判断是否存在指定权限的
3、角色管理:
管理角色、为角色分配权限资源等
注意: 这里用户和角色是一对多的关系,即一个用户身上可以分配多个角色。
可以灵活应对各种需求:比如,一个用户即是库管又是财务的时候,系统针对角色划分里,库管角色和财务角色分配的菜单资源权限不同,但是同时设置为一个人的话,权限就合并后进缓存了。
如果你的项目有特殊需求 比如给政府企事业单位做的系统,涉及到岗位、部门、组织架构的权限角色划分,可以在此基础上扩展出来,增加部门管理、岗位管理后 为用户分配上部门和岗位。
角色本身也可以在命名的时候 按照岗位职责命名,灵活使用,灵活扩展,如有需要特殊扩展,联系小木。
注意:底层脚手架在于灵活扩展,满足需求,这里没有做部门和岗位,很多系统用不上,默认没加,请注意。
4、操作日志:
这里的操作日志设计的是系统关键日志,是通过用户在每一个模块的关键操作中调用添加的,例如用户对一条角色记录做了添加、修改、删除操作,在相应的Service里的save update delete业务中,调用操作日志的服务,加入关键日志描述。
还有一种是通过注解增加,注解增加的日志可能没有手工调用接口增加的日志描述的更准确详细。