润乾报表数据权限控制方案

售前现场交流或售后技术支持阶段,经常被客户问到:“你们报表系统是怎么搞权限控制的?”

既然经常被问,那么今天就讨论一下这个问题。

首先呢,看看权限管理长啥样!

权限管理:(来自百度百科),一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。

权限管理几乎出现在任何系统里面,一般只要有用户的系统就可能涉及权限管理。

从控制力度来看,可以将权限管理分为两大类:

1,功能级权限管理;

2,数据级权限管理。

功能级权限管理是系统要做的事情,比如哪些人可以看到系统的哪些菜单和资源,通常可以由系统开发人员根据业务的流程逻辑控制。而数据级的权限,特别是报表的数据权限,则是由报表可以控制或应该控制的事情。

报表的数据权限控制,可以直观地理解为:不同的机构、角色或具体到人,访问同一张报表时所看到的数据是可能不同的。比如,工资条(也是一张简单的报表),因为绝大多数公司薪资都是保密的,所以很显然,系统内不同人看到的结果是不能相同的。 再比如,区域销售情况统计,各区域销售经理也只能看到所在区域的数据等等。

实际应用环境中,解决此类问题一般是通过直接在 SQL 中筛选出数据绘制报表模板,然后按照登录对象访问指定的模板就可以了。但是,如果使用用户的人员众多,就需要制作 N 多张样式相同只是 SQL(报表数据集)略有不同的报表,工作量大且不利于后期维护。

Then,润乾报表是如何解决数据权限控制的呢?

实际上,针对这种数据权限问题,在润乾报表工具中,可以简单地通过参数或者宏的方式来实现,报表接收到系统传来的人员账号等信息参数,动态显示报表中的数据就行了,从而达到数据权限控制的目的。

接下来,咱们就赶紧瞅瞅该怎么做:

第一步:数据准备

这里采用 mysql 数据库,创建数据表 m_datas , 脚本如下:

CREATE TABLE m_datas (
       id INT NOT NULL,
       'data' varchar(100) NULL,
       'role' varchar(100) NULL
)

表数据

q1png

ID:编号

DATA:数据

ROLE:可查看角色编码

创建角色字典表 m_roles ,脚本如下:

CREATE TABLE m_roles (
       id INT NOT NULL,
       rolename varchar(100) NULL,
       'role' varchar(100) NULL
)

表数据

q2png

ID:编号

ROLENAME:角色名称

ROLE:角色编码

第二步:搞一张报表模板,使用动态参数(宏),并且拼 sql**** 实现数据权限

新建一张报表模板

(1)报表数据集中新建一个“sql 类型”数据集,名称为:m_datas,SQL 语句写成:

SELECT m_datas.id,m_datas.data,m_datas.role,m_roles.rolename FROM m_datas,m_roles 
WHERE  m_datas.role = m_roles.role ${pri}

根据数据集 m_datas 设计模板并定义表达式:

q3png

其中:

A2单元格录入表达式:=m_datas.select(id)

B2单元格录入表达式:=m_datas.data

C2单元格录入表达式:=m_datas.role

D2单元格录入表达式:=m_datas.rolename

(2)菜单栏:报表à参数,增加“role”参数,参数类型为“普通参数”

q4png

(3)菜单栏:报表à参数,增加“pri”参数,参数类型为“动态参数”

q5png

值表达式为:"and m_datas.role>="+role

注意,通过 role 的编号我们可以看出,角色越高看到的数据越多。

保存模板文件即可。

第三步:发布到服务器,并访问报表查看结果数据

把这个报表发布到报表设计器自带的 demo 应用下,通过如下 url 访问:

http://127.0.0.1:6868/demo/reportJsp/showReport.jsp?rpx=datas_pri.rpx&role=0

其中,role 为报表接收的角色 id 值,在集成应用时,可从 session 获取后传入。

** 好了,来啦!!**看效果:

role 为 0 时

q6png

切换 role 为 3 时,仅出现角色 ID>=3 的数据

q7png

肿么样, 是不是很简单?

最后,总个结: 润乾报表不是系统平台,而是一款面向程序猿用于开发报表的工具类软件产品。之所以不做成统一平台,是为了方便和其他应用系统搞在一起,也就是常说的集成,报表开发后,就可以在系统内作为资源被访问了。而对于功能或资源权限,并不是润乾报表有功能缺失,而是这类控制更容易让集成应用自己去管,而且也可以免去重复登录验证或搞单点登录的麻烦。

更多方案类相关问题请查看:方案与选型相关问题分类导航
* 报表没完没了怎么办
* 报表工具——开源还是商用
* 上线一套 BI 系统到底需要多少钱???
* 十大理由选择润乾报表
* 质冠商用 价怼开源 | 润乾报表工具
* 中国式复杂报表:不完全分组报表制作对比(润乾 vs 帆软)
* birt 报表与润乾报表对比