以前重作项目中遇到,以前忙没功夫整理,如今补充下记录,为了简单起见,只点出思路跟关键点。html
需求:在项目管理里某些模块是有文件上传功能的,并且还要跟项目权限,以及审批流程结合起来,以达到,某些人只有受权后才能查看指定文件夹内容,某个项目的某个模块在项目在流程的某些阶段是不能上传东西的。web
之前系统里是本身写的模块,我打算拿jeesite自带的ckfinder来实现,项目里带的是2.3,理论上2.6都支持。可是在网上搜了不少资料,都只是简单应用,不能实现api
首先观察默认结构,前台是一个ckfinder.html,里面收集了一些地址栏参数,合并到配置里,并建立了实例。观察了下参数,没什么想要的。 ckfinder.xml:配置文件,其中types是载入的文件夹。CKFinderConfig 这是重点,配置文件里接受的配置只是默认配置,是不可变的,一旦载入后就没用了。要想动态修改权限,只能在这个类里作权限控制,那么如何从前台传入合适的参数呢。直接加在ckfiner.html后显然是不行的,根据web.xml里的配置可知,必须传给配置专用的servlet里才行,这个操做显然是由ckfinder的js本身完成的,因而去查官方文档,能够看到jsp
按照文档的方式,把项目id与模块id在地址栏拼好,传入后台,在config里初始化权限前作好相关判断便可。设计
那么如何只显示指定type呢,能够看到基类里有types变量,正是与配置文件里相对应,并且是protected类型,子类只要从新覆盖便可。通过试验,仅覆盖types这个map还不够,会报错,还必须同时修改好typeOrder。xml
另外关于baseURL 跟baseDir,由于资料比较多,在此不赘述了。htm
最终效果如图:其中ckfinder是内嵌的iframe,审批等功能在外面的jsp实现。项目管理
==================文档
4.28再补充下关于路径的问题,以前没提,可是我设计的时候考虑到了,按照jeesite原有设计,是写了一个UserfilesDoloadServlet,我由于要作项目的,目录是隔离的,因此仿照他的样子写了一个同样的东西,可是发现这些预览都是不经控制的,也就是说拿到地址能够直接访问。不登陆的用户固然猜不到地址,可是若是登陆的用户是能够根据文件名跟模块名,项目ID,猜到其余项目文件真实访问地址的,最近在看的图解HTTP中也提到这种,叫强制浏览bug(Force browsing),个人解决办法是在项目路径后加一个随机字符串,使得其余项目的文件没法经过路径猜想浏览。固然也有更严厉的方法,可是感受在这个项目里没有必要。字符串