birt是一类由eclipse提供的开源报表工具,具有可视化图标和表格的功能,其url的主要格式类似于http://myhost/frameset?__report=/report/xxx.rptdesign的格式,因此如何判断__report的值成了判断指定报表的关键。
很多时候,人们的做法是指定一个登录服务器,用于管理所有的用户登录权限,但是用户在登录以后就可以浏览所有的报表,假如此时出现了新的需求,财务部的用户需要一份财务部的报表,而市场部的用户登录了服务器以后,也同样具有了查看财务报表的权限,在一个比较大的公司,这将是一件比较危险的事情,或者说,公司新来的同时只允许查看近20天的公司的数据,或者说是2014年以前的报表将被禁止查看。而针对数据级的权限控制目前看来还没有一个通用的方案。
笔者经过调研,发现一类权限管理的框架---shiro。这是一个apache的开源权限管理方案,相较于spring的方式,配置显得更加简单。但是很遗憾的是,shiro仅仅是针对路径的权限管理控制。
再经过研究,发现可以针对shiro的二次开发,比如继承shiro的filter类,扩展过滤规则,或者扩展realm类,丰富权限和角色的种类。然后通过丰富的规则和角色以及权限,通过url的规则来界定用户的访问权限,
例如 GET http://myhost/frameset?__report=/report/xxx.rptdesign&day=20150101
即可通过提取day和__report两个参数来判断相应的用户权限。总的来讲,整个过程的实现并不困难
网友评论